Hello all,

I have a question with the SERIAL type. I want to use it for default identification of table entries:

create table chuwee (
  num serial primary key,
  mesg varchar(50) not null
);

And all the inserts to this table I'm gonna log to this table:

create table chuwee_log (
  id serial primary key,
  date timestamp default current_timestamp,
  num integer not null,
  mesg varchar(50) not null
);

Logging will be done with this rule:

create or replace rule chuwee_rule as on insert to chuwee
do insert into chuwee_log (num, mesg)
   values (new.num, new.mesg);


And all seems to work, but a sequence is called twice for inserts, and logged "num"-s get a +1 value:

sunline=# insert into chuwee (mesg) values ('Hello, world!');
INSERT 9596671 1
sunline=# insert into chuwee (mesg) values ('Aquarium full of tequilla');
INSERT 9596673 1
sunline=# select * from chuwee_log;
 id |            date            | num |           mesg
----+----------------------------+-----+---------------------------
  1 | 2007-09-08 16:18:26.707384 |   2 | Hello, world!
  2 | 2007-09-08 16:18:58.711599 |   4 | Aquarium full of tequilla
(2 rows)

sunline=# select * from chuwee;
 num |           mesg
-----+---------------------------
   1 | Hello, world!
   3 | Aquarium full of tequilla
(2 rows)


How it can be cured, if any?

Best dishes,
Aleksandr.

---------------------------(end of broadcast)---------------------------
TIP 6: explain analyze is your friend

Reply via email to