Re: Trigger Procedure Error: NEW used in query that is not in a rule - Mailing list pgsql-sql

From Pavel Stehule
Subject Re: Trigger Procedure Error: NEW used in query that is not in a rule
Date
Msg-id 162867790708110910v414d7cb3x6e7b4cd16fe4ff80@mail.gmail.com
Whole thread Raw
In response to Re: Trigger Procedure Error: NEW used in query that is not in a rule  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-sql
2007/8/11, Tom Lane <tgl@sss.pgh.pa.us>:
> "Pavel Stehule" <pavel.stehule@gmail.com> writes:
> > NEW is only plpgsql variable. It isn't visible on SQL level.
>
> Correct, but:
>
> > You cannot use new.*, you can:
> > execute 'INSERT ...' || 'VALUES(' || new.a || ',' || new.b ....
>
> You're both overthinking the problem.  In recent releases (at least
> since 8.2) you can do it without any EXECUTE.  Like this:
>
> regression=# create table mytab (f1 int, f2 text);
> CREATE TABLE
> regression=# create table logt  (f1 int, f2 text, ts timestamptz);
> CREATE TABLE
> regression=# create function myt() returns trigger as $$
> regression$# begin
> regression$#   insert into logt values(new.*, now());
> regression$#   return new;
> regression$# end$$ language plpgsql;
> CREATE FUNCTION
>

I know it Tom. But original question contains

EXECUTE 'INSERT INTO ' || quote_ident(SOMEDYNAMICNTABLENAME) || ' SELECT new.*';

and then he needs EXECUTE (propably).

but new.* in insert is nice feature.

Regards
Pavel Stehule


pgsql-sql by date:

Previous
From: Tom Lane
Date:
Subject: Re: Trigger Procedure Error: NEW used in query that is not in a rule
Next
From: "Javier Fonseca V."
Date:
Subject: Re: Trigger Procedure Error: NEW used in query that is not in a rule