如何使用Postgresql获取自动生成字段的值?

时间:2009-07-13 20:37:04

标签: sql postgresql

我有一个像这样的postgres表:

CREATE SEQUENCE seq;
CREATE TABLE tbl (id INTEGER DEFAULT VALUE nextval('seq'), data VARCHAR);

当我插入表格时:

INSERT INTO tbl (data) VALUES ('something');

如何获取刚刚创建的记录的id字段的值?

(注意,我可能有一些SQL语法有点关闭;但要点应该是明确的)

假设为了参数,我无法在同一个会话上调用currval,因为我不控制事务边界。我可能在下一次电话会议的同一会话中工作,但我可能也不会。

3 个答案:

答案 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)