lastval() 是一个系统函数,用于返回当前会话中nextval()最近一次返回的值,无论调用的是哪个序列。
lastval() 在 PostgreSQL 8.1 中被添加。
用法
lastval () → bigint
将返回调用nextval()的最后一个序列的值。
如果在当前会话中尚未调用任何序列的nextval(),则会引发错误。
lastval() 类似于MySQL的 LAST_INSERT_ID() 函数。但请注意,在 INSERT 或 UPDATE 操作期间,使用 RETURNING 子句直接检索由nextval()生成的值通常更可靠、更高效。
变更历史
- PostgreSQL 8.1
- 添加(提交 657c098e)
示例
lastval() 的基本用法示例
postgres=# CREATE SEQUENCE foo_seq; CREATE SEQUENCE postgres=# CREATE SEQUENCE bar_seq MINVALUE 99; CREATE SEQUENCE postgres=# SELECT nextval('bar_seq'); nextval --------- 99 (1 row) postgres=# SELECT lastval(); lastval --------- 99 (1 row) postgres=# SELECT nextval('foo_seq'); nextval --------- 1 (1 row) postgres=# SELECT lastval(); lastval --------- 1 (1 row)
如果之前未调用nextval(),将引发 ERROR
postgres=# SELECT lastval(); ERROR: lastval is not yet defined in this session
在 INSERT 或 UPDATE 操作中显式返回特定序列生成的值时,请使用 RETURNING 子句,而不是 lastval()。
postgres=# CREATE TABLE foo (id INT NOT NULL DEFAULT nextval('foo_seq')); CREATE TABLE postgres=# INSERT INTO foo VALUES (DEFAULT) RETURNING id; id ---- 2 (1 row)
参考资料
- PostgreSQL 文档: 序列函数
