setval() 是一个用于设置序列当前值的系统函数。
setval() 函数于 PostgreSQL 6.4 中添加。
用法
setval (regclass,bigint[,boolean] ) →bigint
默认情况下,setval() 会将序列的 last_value 字段设置为指定的值,并将其 is_called 字段设置为 true,这意味着下一次调用 nextval() 时,会在返回下一个值之前先推进序列。
如果提供了第三个参数并将其设置为 false,则下一次调用 nextval() 时不会推进序列。
变更历史
- PostgreSQL 6.4
- 添加于(提交 8e9d69d6)
示例
setval() 的基本用法示例
postgres=# CREATE SEQUENCE foo_seq; CREATE SEQUENCE postgres=# SELECT nextval('foo_seq'); nextval --------- 1 (1 row) postgres=# SELECT setval('foo_seq', 99); setval -------- 99 (1 row) postgres=# SELECT nextval('foo_seq'); nextval --------- 100 (1 row)
不推进序列地调用 setval()
postgres=# SELECT setval('foo_seq', 999, false);
setval
--------
999
(1 row)
postgres=# SELECT nextval('foo_seq');
nextval
---------
999
(1 row)
无法将序列设置为其最小值或最大值之外的值
postgres=# CREATE SEQUENCE bar_seq MINVALUE 99;
CREATE SEQUENCE
postgres=# SELECT setval('bar_seq', 1);
ERROR: setval: value 1 is out of bounds for sequence "bar_seq" (99..9223372036854775807)
参考资料
- PostgreSQL 文档: 序列函数
