加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何在PostgreSQL中使用currval()来获取最后插入的id?

发布时间:2020-12-13 16:23:40 所属栏目:百科 来源:网络整理
导读:我有一张桌子: CREATE TABLE names (id serial,name varchar(20)) 我想从该表中“最后插入的id”,而不使用插入时的RETURNING id.似乎有一个功能 CURRVAL() ,但我不明白如何使用它. 我尝试过: SELECT CURRVAL() AS id FROM names_id_seqSELECT CURRVAL('nam
我有一张桌子:
CREATE TABLE names (id serial,name varchar(20))

我想从该表中“最后插入的id”,而不使用插入时的RETURNING id.似乎有一个功能CURRVAL(),但我不明白如何使用它.

我尝试过:

SELECT CURRVAL() AS id FROM names_id_seq
SELECT CURRVAL('names_id_seq')
SELECT CURRVAL('names_id_seq'::regclass)

但它们都不起作用.如何使用currval()获取最后插入的ID?

如果您创建一个列作为串行PostgreSQL自动创建一个序列.

序列的名称是自动生成的,并且始终是tablename_columnname_seq,在您的情况下,序列名称为names_id_seq.

插入表后,可以使用该序列名称调用currval():

postgres=> CREATE TABLE names in schema_name (id serial,name varchar(20));
CREATE TABLE
postgres=> insert into names (name) values ('Arthur Dent');
INSERT 0 1
postgres=> select currval('names_id_seq');
 currval
---------
       1
(1 row)
postgres=>

您也可以使用pg_get_serial_sequence()代替硬编码序列名称:

select currval(pg_get_serial_sequence('names','id'));

这样你就不需要依赖Postgres使用的命名策略了.

或者,如果您根本不想使用序列名称,请使用lastval()

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读