LINUX.ORG.RU

PostgreSQL 7.2


0

0

Всем привет. Вопрос такой - как выполнить последовательно в одной
транзакции несколько INSERT в связанные таблицы по FOREIGN KEY, 
желательно не задействуя oid-ы? Примерный вид таблиц:

table oper                             table trans
-----------                            ------------------
cop_id  serial (PR_KEY) ------------>  cop_id int (FG_KEY)
.....                                  .....
op_code num    (NOT UNIQUE)            .....

1-й insert в таблицу oper, затем нужно узнать значение cop_id и
использовать его для insert 'ов в таблицу trans. Использование
триггера не подходит (в силу постановки задачи). Можно ли узнать
значение cop_id после первого insert через MAX() и "безопасно" ли
это? Пока до понедельника ( ответы лучше мыльте peter@sbank.elcom.ru)

★★

Создай sequence и используй nextval и currval

anonymous
()

Хорошо, тогда вопрос такой:
Если транзацикция будет выглядеть так -
BEGIN;
insert into oper values(....);
select curval(..);
insert into trans values(....);
COMMIT;

то не будет ли полученное значение от curval - "fake", поскольку
в это же время может быть запущена еще какая нить операция с 
insert-ом в таблицу oper? Кстати секвенция у меня уже есть - она
строится по умолчанию при создании таблицы с полем serial.

PETER ★★
() автор топика

Currval выдает значение только для данной сессии, у паралельных процессов будет соотвественно другое значение выдаваться.

Для уверенности проверь на небольшом эксперементе.

В двух консолях сделай последовательно nextval а затем currval

anonymous
()

ОК, спасибо!

PETER ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.