这个语法在任何版本的PostgreSQL中都是无效的。
ALTER SEQUENCE payments_id_seq LASTVALUE 22
这个可以行。
ALTER SEQUENCE payments_id_seq RESTART WITH 22;
而且等同于:
SELECT setval('payments_id_seq', 22, FALSE);
在ALTER SEQUENCE
和序列函数的当前手册中有更多内容。
请注意,setval()
函数期望的参数要么是(regclass, bigint)
或者(regclass, bigint, boolean)
。在上面的例子中,我提供了未指定类型的字面量。这也是可以的。但是如果你向函数传递了带有类型的变量,你可能需要使用显式的类型转换来满足函数类型解析的要求。例如:
SELECT setval(my_text_variable::regclass, my_other_variable::bigint, FALSE);
重新启动一个序列或IDENTITY列,使其从当前最大列值开始(甚至不知道序列名称):
SELECT setval(pg_get_serial_sequence('payments', 'id')
, COALESCE(max(id) + 1, 1)
, false)
FROM payments;
请参见:
对于重复操作,您可能会感兴趣的是:
ALTER SEQUENCE payments_id_seq START WITH 22;
ALTER SEQUENCE payments_id_seq RESTART;
START [WITH]
存储一个默认的 RESTART
数字,用于后续的 RESTART
调用而无需提供值。最后一部分需要使用 Postgres 8.4 或更高版本。
setval()
似乎至少有两个参数。 - user554546