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 文档: 序列函数