我有一个像这样的postgres表:
CREATE SEQUENCE seq;
CREATE TABLE tbl (id INTEGER DEFAULT VALUE nextval('seq'), data VARCHAR);
当我插入表格时:
INSERT INTO tbl (data) VALUES ('something');
如何获取刚刚创建的记录的id字段的值?
(注意,我可能有一些SQL语法有点关闭;但要点应该是明确的)
假设为了参数,我无法在同一个会话上调用currval,因为我不控制事务边界。我可能在下一次电话会议的同一会话中工作,但我可能也不会。
答案 0 :(得分:1)
在同一场会议中:
SELECT currval('seq');
编辑:但是如果你不能使用currval / nextval,因为你不知道是否在同一个会话中插入和选择序列值,如果你在postgresql 8.2或更高版本,你可以可能会写这样的插入语句。
INSERT INTO tbl (data) VALUES ('something') RETURNING id;
也应该返回最后插入的id。
答案 1 :(得分:1)
您正在寻找INSERT ... RETURNING
。来自The Manual's section on INSERT
:
可选的RETURNING子句使INSERT根据实际插入的每一行计算和返回值。这主要用于获取默认提供的值,例如序列号。但是,允许使用表的列的任何表达式。 RETURNING列表的语法与SELECT的输出列表的语法相同。
答案 2 :(得分:0)
使用nextval和currval,看看这里:http://www.postgresql.org/docs/8.0/static/functions-sequence.html