在PostgreSQL中,如何将最后一个id插入到表中?
在MS SQL中有SCOPE_IDENTITY()。
请不要建议我使用这样的东西:
select max(id) from table
在PostgreSQL中,如何将最后一个id插入到表中?
在MS SQL中有SCOPE_IDENTITY()。
请不要建议我使用这样的东西:
select max(id) from table
当前回答
试试这个:
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”将返回您正在寻找的序列值。
其他回答
请参阅下面的示例
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'));
其他答案没有显示如何使用return返回的值。下面是一个将返回值插入到另一个表的示例。
WITH inserted_id AS (
INSERT INTO tbl1 (col1)
VALUES ('foo') RETURNING id
)
INSERT INTO tbl2 (other_id)
VALUES ((select id from inserted_id));
对于需要获取所有数据记录的用户,可以添加
returning *
到查询的末尾以获取包括id在内的所有对象。
你可以在INSERT语句中使用return子句,如下所示
wgzhao=# create table foo(id int,name text);
CREATE TABLE
wgzhao=# insert into foo values(1,'wgzhao') returning id;
id
----
1
(1 row)
INSERT 0 1
wgzhao=# insert into foo values(3,'wgzhao') returning id;
id
----
3
(1 row)
INSERT 0 1
wgzhao=# create table bar(id serial,name text);
CREATE TABLE
wgzhao=# insert into bar(name) values('wgzhao') returning id;
id
----
1
(1 row)
INSERT 0 1
wgzhao=# insert into bar(name) values('wgzhao') returning id;
id
----
2
(1 row)
INSERT 0
试试这个:
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”将返回您正在寻找的序列值。