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

ALTER TABLE product AUTO_INCREMENT = 1453

AND

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

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


当前回答

-- 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建议在评论

其他回答

设置序列计数器:

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    | 

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

TRUNCATE TABLE someTable RESTART IDENTITY;
ALTER SEQUENCE public."Table_Id_seq"
RESTART 50;

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

要重置自动递增,您必须通过使用以下查询获得您的序列名。

语法:

SELECT pg_get_serial_sequence(‘tablename’, ‘ columnname‘);

例子:

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

查询将返回autoid的序列名为"Demo_autoid_seq" 然后使用以下查询重置自动id

语法:

ALTER SEQUENCE sequenceName RESTART WITH value;

例子:

ALTER SEQUENCE "Demo_autoid_seq" RESTART WITH 1453;

我不确定以上所有的答案, 如果我没有序列名呢? 如果我不想截断我的表呢?

下面的查询帮助我做到这一点,而不影响现有的数据。

ALTER TABLE <<table_name>>
    ALTER COLUMN <<primary_key_column_name>> RESTART SET START 4044;