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

ALTER TABLE product AUTO_INCREMENT = 1453

AND

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

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


当前回答

ALTER SEQUENCE public."Table_Id_seq"
RESTART 50;

这个问题对我很管用。Postgresql版本14

其他回答

如果表格是这样的

bigint NOT NULL GENERATED ALWAYS AS IDENTITY ( INCREMENT 1 START 0)

插入0-9范围内的记录后,会导致下次插入时发生冲突,因此重置START:

ALTER TABLE ... ALTER COLUMN ... RESTART WITH 10;

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

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

ALTER SEQUENCE product_id_seq RESTART WITH 1453;

要将其设置为下一个最大值,您可以使用:

SELECT SETVAL(pg_get_serial_sequence('table_name', 'column_name'), (SELECT MAX(column_name) FROM table_name));

设置序列计数器:

setval('product_id_seq', 1453);

如果你不知道序列名,使用pg_get_serial_sequence函数:

select pg_get_serial_sequence('product', 'id');
 pg_get_serial_sequence 
------------------------
 public.product_id_seq

参数是表名和列名。

或者只是在psql提示符下发出一个\d product:

=> \d product
                         Table "public.product"
 Column |  Type   |                      Modifiers                       
--------+---------+------------------------------------------------------
 id     | integer | not null default nextval('product_id_seq'::regclass)
 name   | text    | 

使用这个查询来检查什么是序列键与模式和表,

SELECT pg_get_serial_sequence('"SchemaName"."TableName"', 'KeyColumnName'); // output: "SequenceKey"

使用这个查询逐个增加增量值,

SELECT nextval('"SchemaName"."SequenceKey"'::regclass); // output 110

当插入到下一个表时,增量值将被用作键(111)。

使用此查询将特定值设置为增量值

SELECT setval('"SchemaName"."SequenceKey"', 120);

当插入到下一个表时,增量值将被用作键(121)。