BUG #5274: [PL/PgSQL] EXECUTE ... USING variable expansion

From: "Vincenzo Romano" <vincenzo(dot)romano(at)notorand(dot)it>
To: pgsql-bugs(at)postgresql(dot)org
Subject: BUG #5274: [PL/PgSQL] EXECUTE ... USING variable expansion
Date: 2010-01-13 19:10:53
Message-ID: 201001131910.o0DJArAo086208@wwwmaster.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs


The following bug has been logged online:

Bug reference: 5274
Logged by: Vincenzo Romano
Email address: vincenzo(dot)romano(at)notorand(dot)it
PostgreSQL version: 8.4.2
Operating system: Linux
Description: [PL/PgSQL] EXECUTE ... USING variable expansion
Details:

My system says:
~ lsb_release -a
LSB Version:
:core-3.1-amd64:core-3.1-noarch:core-3.2-amd64:core-3.2-noarch:desktop-3.1-a
md64:desktop-3.1-noarch:desktop-3.2-amd64:desktop-3.2-noarch
Distributor ID: Fedora
Description: Fedora release 12 (Constantine)
Release: 12
Codename: Constantine

If you try the following:

CREATE TABLE test ( i INT );

CREATE OR REPLACE FUNCTION func()
RETURNS void
LANGUAGE plpgsql
AS $function$
DECLARE
e TEXT;
t TEXT;
i INT;
BEGIN
i := 42;
t := 'answer';
EXECUTE 'SELECT $1' INTO e USING t;
RAISE INFO '%',e;
EXECUTE 'ALTER TABLE test ALTER COLUMN i SET DEFAULT $1' USING i;
END;
$function$;

SELECT func();

The first EXECUTE...USING replaces the variable $1 with the value of the
variable "t". The first output line reads:

INFO: answer

The second EXECUTE...USING doesn't do the replacement and triggers an
error:

ERROR: there is no parameter $1
CONTEXT: SQL statement "ALTER TABLE test ALTER COLUMN i SET DEFAULT $1"
PL/pgSQL function "func" line 10 at EXECUTE statement

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message James Bellinger 2010-01-13 20:58:38 BUG #5275: validate_exec in port/exec.c only reads u/g/o, not ACLs
Previous Message David E. Wheeler 2010-01-13 19:08:33 Termination When Switching between PL/Perl and PL/PerlU