在PostgreSQL中,如何将最后一个id插入到表中?

在MS SQL中有SCOPE_IDENTITY()。

请不要建议我使用这样的东西:

select max(id) from table

当前回答

其他答案没有显示如何使用return返回的值。下面是一个将返回值插入到另一个表的示例。

WITH inserted_id AS (
  INSERT INTO tbl1 (col1)
  VALUES ('foo') RETURNING id
)

INSERT INTO tbl2 (other_id) 
VALUES ((select id from inserted_id));

其他回答

SELECT CURRVAL(pg_get_serial_sequence('my_tbl_name','id_col_name'))

当然,您需要提供表名和列名。

这将用于当前会话/连接 http://www.postgresql.org/docs/8.3/static/functions-sequence.html

试试这个:

select nextval('my_seq_name');  // Returns next value

如果这个返回1(或者你的序列的start_value),那么将序列重置回原始值,传递false标志:

select setval('my_seq_name', 1, false);

否则,

select setval('my_seq_name', nextValue - 1, true);

这将把序列值恢复到原始状态,“setval”将返回您正在寻找的序列值。

参见INSERT语句的RETURNING子句。基本上,INSERT可兼做查询,并返回插入的值。

其他答案没有显示如何使用return返回的值。下面是一个将返回值插入到另一个表的示例。

WITH inserted_id AS (
  INSERT INTO tbl1 (col1)
  VALUES ('foo') RETURNING id
)

INSERT INTO tbl2 (other_id) 
VALUES ((select id from inserted_id));

请参阅下面的示例

CREATE TABLE users (
    -- make the "id" column a primary key; this also creates
    -- a UNIQUE constraint and a b+-tree index on the column
    id    SERIAL PRIMARY KEY,
    name  TEXT,
    age   INT4
);

INSERT INTO users (name, age) VALUES ('Mozart', 20);

然后,要获取最后插入的id,请使用下面的语句对user表执行seq列名为id

SELECT currval(pg_get_serial_sequence('users', 'id'));