Re: OIDs in triggers
От | Stephan Szabo |
---|---|
Тема | Re: OIDs in triggers |
Дата | |
Msg-id | Pine.BSF.4.21.0102230844540.17275-100000@megazone23.bigpanda.com обсуждение исходный текст |
Ответ на | OIDs in triggers (Max Rudensky <fonin@ziet.zhitomir.ua>) |
Список | pgsql-general |
On Sat, 17 Feb 2001, Max Rudensky wrote: > Hi folks, > > Here's what I have: > > create table contact ( > contact_id serial, > ... <skipped fields> > primary key (contact_id) > ); > > create table customers ( > customer_id serial, > shipping_contact_id int4, > billing_contact_id int4, > ... <skipped fields> > > primary key (customer_id) > ); > > Well, I want to write a trigger on CUSTOMERS that will insert 2 records into table CONTACT and > link it to fields shipping_contact_id and billing_contact_id in CUSTOMERS. But how, if I won't know > oids of inserted rows ? I may remember sequence's nextval in variable and use it in both insert and update > statements, but during many insert in contact table sequence's nextval may be used by > concurrent transactions, so one of them will be rolled back. > > I prefer to do it with PL/pgSQL, anyway I can't use C. You shouldn't ever have two transactions getting the same value from nextval on the sequence. It should be guaranteed to be unique, so getting the currval after each insert or nextval before should work. Note that serial does not guarantee that the number sequence you get will not have holes just that they are unique.
В списке pgsql-general по дате отправления: