Есть разные способы сделать это.
Самый простой способ - использовать lastval()
функцию, которая будет возвращать значение, сгенерированное «последней» последовательностью nextval.
START TRANSACTION;
INSERT INTO entity ...;
INSERT INTO t2 (eid, ...) VALUES (lastval(), ...), (...), (...);
COMMIT;
Если вы знаете имя последовательности для entity
таблицы, вы также можете использовать currval
функцию:
START TRANSACTION;
INSERT INTO entity ...;
INSERT INTO t2 (eid, ...) VALUES (currval('entity_eid_seq'), ...), (...), (...);
COMMIT;
Это можно записать в более общем виде, используя pg_get_serial_sequence()
функцию, избегая жесткого кодирования имени последовательности:
START TRANSACTION;
INSERT INTO entity ...;
INSERT INTO t2 (eid, ...) VALUES (currval(pg_get_serial_sequence('entity', 'eid')), ...), (...);
COMMIT;
Для получения более подробной информации, пожалуйста, обратитесь к руководству: http://www.postgresql.org/docs/current/static/functions-sequence.html
a_horse_with_no_name
источник