我想强制一个表的自动增量字段的一些值,我尝试了这样:

ALTER TABLE product AUTO_INCREMENT = 1453

AND

ALTER SEQUENCE product  RESTART WITH 1453;
ERROR:  relation "your_sequence_name" does not exist

我有一个表产品与Id和名称字段


当前回答

注意,如果表名带有'_',它将在序列名中被删除。

例如,表名:user_tokens列:id 序列名称:usertokens_id_seq

其他回答

下面是你要找的命令,假设你的product表序列是product_id_seq:

ALTER SEQUENCE product_id_seq RESTART WITH 1453;
-- Change the starting value of the sequence

ALTER SEQUENCE project_id_seq RESTART 3000;

相同但充满活力:

SELECT SETVAL('project_id_seq', (SELECT MAX(id) FROM project));

SELECT的使用很奇怪,但它有效。

来源: https://kylewbanks.com/blog/Adding-or-Modifying-a-PostgreSQL-Sequence-Auto-Increment

编辑:删除+1建议在评论

下面的命令会自动执行此操作:这也会删除表中的所有数据。所以要小心。

TRUNCATE TABLE someTable RESTART IDENTITY;

如果您使用id列创建了表product,那么序列就不是简单地称为product,而是product_id_seq(即${table}_${column}_seq)。

这是你需要的ALTER SEQUENCE命令:

ALTER SEQUENCE product_id_seq RESTART WITH 1453

您可以使用psql中的\ds命令查看数据库中的序列。如果您执行\d product并查看列的默认约束,那么nextval(…)调用也将指定序列名。

为方便浏览者,由评论转换而成

从这条消息中不清楚正确的语法是什么。它是:

ALTER SEQUENCE product_id_seq RESTART WITH 1453;