Postgres 手动更改序列。
Postgres 手动更改序列。
我正在尝试将序列设置为特定值。
SELECT setval('payments_id_seq'), 21, true;
这会导致错误:
错误:函数 setval(unknown) 不存在
使用 ALTER SEQUENCE
似乎也不起作用?
ALTER SEQUENCE payments_id_seq LASTVALUE 22;
该如何做呢?
参考文献:https://www.postgresql.org/docs/current/functions-sequence.html
admin 更改状态以发布 2023年5月20日
这个语法在任何版本的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);
对于重复操作,您可能会感兴趣:
ALTER SEQUENCE payments_id_seq START WITH 22; -- set default ALTER SEQUENCE payments_id_seq RESTART; -- without value
START [WITH]
会存储默认的RESTART
数字,该数字用于后续的RESTART
调用而无需值。您需要Postgres 8.4或更高版本来完成最后一部分。