Rules and sequences - Mailing list pgsql-sql

From Ben Morrow
Subject Rules and sequences
Date
Msg-id 20100526181620.GA54996@osiris.mauzo.dyndns.org
Whole thread Raw
Responses Re: Rules and sequences  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-sql
I am trying to implement a fairly standard 'audit table' setup, but
using rules instead of triggers (since it should be more efficient).
However, I'm running into problems when one of the audited tables has a
'serial' column that is allowed to default:
   create table foo (id serial, bar text);   create table audit (ix bigserial, rec text);   create rule audit_insert as
oninsert to foo do also        insert into audit (rec) values ((new.*)::text);   insert into foo (bar) values ('baz');
select * from foo;        id | bar        ----+-----         1 | baz       (1 row)   select * from audit;        ix |
rec         ----+---------         1 | (2,baz)       (1 row)
 

I can see why this is happening (the rule is essentially a macro, so the
NEW expression gets expanded twice, including the nextval call, so the
sequence is incremented twice), but is there any way to prevent it? Some
way of 'materialising' the NEW row so it is just plain values rather
than a list of expressions?

Ben



pgsql-sql by date:

Previous
From: Michele Petrazzo - Unipex
Date:
Subject: inner join and limit
Next
From: Rolando Edwards
Date:
Subject: Re: inner join and limit