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 по дате отправления:

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: www-sql question
Следующее
От: ochapiteau
Дата:
Сообщение: drop a constraint