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

问题描述 投票:179回答:9

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

ALTER TABLE product AUTO_INCREMENT = 1453

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

我是postgres的新手:(

我有一张桌子productIdname字段

sql postgresql reset auto-increment
9个回答
238
投票

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

这是您需要的ALTER SEQUENCE命令:

ALTER SEQUENCE product_id_seq RESTART WITH 1453

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


1
投票

要使用序列ID

SELECT pg_get_serial_sequence('tableName', 'ColumnName');

这将为序列ID提供tableName ColumnName seq

获取最后一粒种子号码

select currval(pg_get_serial_sequence('tableName', 'ColumnName'));

或者如果您知道序列ID已经直接使用它。

select currval(tableName_ColumnName_seq);

它会给你最后一个种子号

要重置种子数使用

ALTER SEQUENCE tableName_ColumnName_seq RESTART WITH 45

140
投票

这是您要查找的命令,假设产品表的序列是product_id_seq:

ALTER SEQUENCE product_id_seq RESTART WITH 1453;


111
投票

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

TRUNCATE TABLE someTable RESTART IDENTITY;

52
投票

要设置序列计数器:

setval('product_id_seq', 1453);

如果您不知道序列名称,请使用pg_get_serial_sequence函数:

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

参数是表名和列名。

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

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

12
投票

为了方便访客而转换自评论

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

ALTER SEQUENCE product_id_seq RESTART WITH 1453;

3
投票

如果要从GUI重置自动增量,请按照以下步骤操作。

  1. 转到您的数据库
  2. 点击公共
  3. 在表的列表页面中,您可以看到TABS,如'Tables','Views','Sequences'之类的。
  4. 单击序列
  5. 当您单击“序列”时,您可以看到所有序列列表,单击要重置的任何序列
  6. 之后你可以看到多种选择,如'Alter','Set Value','Restart','Reset'等...
  7. 然后单击Reset,然后添加一个New Row。

3
投票

- 更改序列的起始值

ALTER SEQUENCE project_id_seq RESTART 3000;

相同但动态:

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

我同意SELECT的使用令人不安,但它有效。

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


2
投票

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

句法:

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;

2
投票

如果您有一个IDENTITY列的表要重置下一个值,则可以使用以下命令:

ALTER TABLE <table name> 
    ALTER COLUMN <column name> 
        RESTART WITH <new value to restart with>;
© www.soinside.com 2019 - 2024. All rights reserved.