Postgres 手动更改序列。

8 浏览
0 Comments

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日
0
0 Comments

这个语法在任何版本的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或更高版本来完成最后一部分。

0
0 Comments

括号放错了位置:

SELECT setval('payments_id_seq', 21, true);  -- next value will be 22

否则,您正在使用单个参数调用setval,而它需要两个或三个参数。

这与SELECT setval('payments_id_seq', 21)相同。

0