Re: Trigger Procedure Error: NEW used in query that is not in a rule

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: "Pavel Stehule" <pavel(dot)stehule(at)gmail(dot)com>
Cc: "Javier Fonseca V(dot)" <fonsecajavier(at)gmail(dot)com>, pgsql-sql(at)postgresql(dot)org
Subject: Re: Trigger Procedure Error: NEW used in query that is not in a rule
Date: 2007-08-11 15:50:41
Message-ID: 2071.1186847441@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general pgsql-sql

"Pavel Stehule" <pavel(dot)stehule(at)gmail(dot)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
regression=# create trigger t1 before insert on mytab for each row
regression-# execute procedure myt();
CREATE TRIGGER
regression=# insert into mytab values(1, 'foo');
INSERT 0 1
regression=# insert into mytab values(2, 'bar');
INSERT 0 1
regression=# select * from logt;
f1 | f2 | ts
----+-----+-------------------------------
1 | foo | 2007-08-11 11:46:51.0286-04
2 | bar | 2007-08-11 11:46:57.406638-04
(2 rows)

regards, tom lane

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Tom Lane 2007-08-11 15:58:03 Re: timestamp skew during 7.4 -> 8.2 upgrade
Previous Message Pavel Stehule 2007-08-11 14:51:31 Re: why it doesn't work? referential integrity

Browse pgsql-sql by date

  From Date Subject
Next Message Pavel Stehule 2007-08-11 16:10:04 Re: Trigger Procedure Error: NEW used in query that is not in a rule
Previous Message Joshua D. Drake 2007-08-11 13:58:41 Re: Performance on writable views