在PostgreSQL中,我如何获得插入到表中的最后一个id?
在MS SQL中有SCOPE_IDENTITY()。
请不要建议我使用类似这样的东西:
select max(id) from table
在PostgreSQL中,我如何获得插入到表中的最后一个id?
在MS SQL中有SCOPE_IDENTITY()。
请不要建议我使用类似这样的东西:
select max(id) from table
Postgres内置了一个机制,可以在相同的查询中返回id或您想要查询返回的任何内容。
下面是一个示例。假设您已经创建了一个表,该表有2个列column1和column2,您想要在每次插入后返回column1:
# create table users_table(id serial not null primary key, name character varying);
CREATE TABLE
#insert into users_table(name) VALUES ('Jon Snow') RETURNING id;
id
----
1
(1 row)
# insert into users_table(name) VALUES ('Arya Stark') RETURNING id;
id
----
2
(1 row)
试试这个:
select nextval('my_seq_name'); // Returns next value
select setval('my_seq_name', 1, false);
select setval('my_seq_name', nextValue - 1, true);
这将恢复序列值到原始状态,"setval"将返回您要查找的序列值。
我在使用Java和Postgres时遇到了这个问题。通过更新新的Connector-J版本,我解决了它。
postgresql-9.2-1002.jdbc4.jar
https://jdbc.postgresql.org/download.html: 版本42.2.12
基于上面 @ooZman 的答案,在 PostgreSQL v12 中,当你需要插入下一个“序列”(类似于自动增量)的值而不会搞乱表格或计数器时,似乎可以这样做。(注意:我尚未在更复杂的数据库集群配置中测试过...)
$insert_next_id = $return_result->query("select (setval('"your_id_seq"', (select nextval('"your_id_seq"')) - 1, true)) +1");