在postgres中重置自动递增计数器

我想强制一个表的自动增量字段的值,我试着这个:

ALTER TABLE product AUTO_INCREMENT = 1453 

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

我是新来的postgres 🙁

我有一个表和Idname字段的产品

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

这是您需要的ALTER SEQUENCE命令:

 ALTER SEQUENCE product_id_seq RESTART WITH 1453 

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

以下是您正在查找的命令,假定产品表的序列是product_id_seq:

ALTER SEQUENCE product_id_seq RESTART WITH 1453;

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

 TRUNCATE TABLE someTable RESTART IDENTITY; 

要设置序列计数器:

 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 | 

为了游客的方便,从评论转换

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

 ALTER SEQUENCE product_id_seq RESTART WITH 1453; 

要重置自动增量,您必须使用以下查询来获取序列名称。

句法:

 SELECT pg_get_serial_sequence('tablename', ' columnname'); 

例:

 SELECT pg_get_serial_sequence('demo', 'autoid'); 

查询将返回autoid的序列名称为“Demo_autoid_seq”然后使用以下查询重置autoid

句法:

 ALTER SEQUENCE sequenceName RESTART WITH value; 

例:

 ALTER SEQUENCE "Demo_autoid_seq" RESTART WITH 1453;