Answers:
有不同的方法可以做到这一点。
最简单的方法是使用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
您没有指定Postgresql版本,但是如果您使用的是8.4+,则可以使用该RETURNING
子句返回刚插入的ID(或任何列)。
文件:http : //www.postgresql.org/docs/current/static/sql-insert.html
例:
INSERT INTO t2 (eid, ...) VALUES (...) RETURNING eid;
如果您使用的是Postgresql 9.1+版本,则还可以使用WITH
子句(aka Common Table Expressions
)插入到一个子句中,然后引用该RETURNING
子句中的值以执行更多操作(WITH子句可以链接在一起)。
文档WITH
条款:http : //www.postgresql.org/docs/current/static/queries-with.html