Search Postgresql Archives

Re: How can I get one OLD.* field in a dynamic query inside a trigger function ?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Le 24/10/09 06:46, Pavel Stehule a écrit :
2009/10/24 Bruno Baguette <bruno.baguette@xxxxxxxxx>:
Hello !

I'm trying to write a little trigger function with variable arguments
quantity (at least one, but can be 2,3,4 arguments).
Theses arguments are fields name, so only varchar variable.

Since it is a dynamic query, I use the EXECUTE statement as explained on
<http://www.postgresql.org/docs/8.3/interactive/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN>

CREATE OR REPLACE FUNCTION delete_acl_trigger() RETURNS trigger AS
$delete_acl_trigger$
DECLARE
BEGIN
 FOR i IN 0 .. TG_NARGS LOOP
   EXECUTE 'SELECT delete_acl(OLD.' || TG_ARGV[i] || ');';
 END LOOP;
 RETURN OLD;
END;
$delete_acl_trigger$ LANGUAGE plpgsql;

But, when the trigger is triggered, I receive this error message :
"Query failed: ERROR: OLD used in query that is not in a rule"

How can I get the value of the OLD.' || TG_ARGV[i] field ?

OLD is variable only in PLpgSQL procedure, - outside doesn't exists.
If you have a 8.4, you can use USING clause

EXPLAIN 'SELECT $1.' || TG_ARGV[i] INTO somevar USING OLD;

http://www.postgresql.org/docs/8.4/static/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN

Hello Pavel,

Thanks for your answer !

Unfortunately, I'm running PostgreSQL 8.3.7 (PostgreSQL 8.3.7 on i586-mandriva-linux-gnu, compiled by GCC i586-mandriva-linux-gnu-gcc (GCC) 4.2.3 (4.2.3-6mnb1)).

Since 8.4.1 is not available for Mandriva 2009.1, I can only have this PostgreSQL version. (I don't have root access on that server).

Is there another way, usable in PostgreSQL 8.3.7, to solve my problem ?

Many thanks in advance !

Kind Regards,

--
Bruno Baguette - bruno.baguette@xxxxxxxxx

--
Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux