我想将表的自增字段强制设置为某个值,我尝试了这个:
ALTER TABLE product AUTO_INCREMENT = 1453
并且
ALTER SEQUENCE product RESTART WITH 1453;
ERROR: relation "your_sequence_name" does not exist
我有一个名为product
的表格,其中包含Id
和name
字段。
我想将表的自增字段强制设置为某个值,我尝试了这个:
ALTER TABLE product AUTO_INCREMENT = 1453
并且
ALTER SEQUENCE product RESTART WITH 1453;
ERROR: relation "your_sequence_name" does not exist
我有一个名为product
的表格,其中包含Id
和name
字段。
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 yourTableName_yourColumnName_seq RESTART WITH #
,其中"seq"是字面文本,您需要为#填入一个数字。不要忽略下划线。 :-) - kmortALTER SEQUENCE my_schema.product_id_seq RESTART WITH 1453
。 - Daniel L. VanDenBosch1453
的记录,则应该使用RESTART WITH 1454
。 - hughes以下命令可以自动完成此操作:这也将删除表中的所有数据。因此请小心。
TRUNCATE TABLE someTable RESTART IDENTITY;
TABLE
关键字是多余的。TRUNCATE someTable RESTART IDENTITY;
就足够了。 - user1TRUNCATE someTable RESTART IDENTITY CASCADE;
吗? - VedranTRUNCATE table2, table1 RESTART IDENTITY;
。 - Zeeshanef假设您的产品表的序列为product_id_seq,以下是您要寻找的命令:
ALTER SEQUENCE product_id_seq RESTART WITH 1453;
设置序列计数器:
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 |
-- 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
语句很奇怪,但它能起作用。
Source: https://kylewbanks.com/blog/Adding-or-Modifying-a-PostgreSQL-Sequence-Auto-Increment
编辑:根据评论建议,已删除+1
要将它设置为下一个最高的值,您可以使用:
SELECT SETVAL(pg_get_serial_sequence('table_name', 'column_name'), (SELECT MAX(column_name) FROM table_name));
+1
。即:SELECT SETVAL(pg_get_serial_sequence('table_name', 'column_name'), (SELECT MAX(column_name) + 1 FROM table_name));
- Siddharth Venu如果您有一个帶有IDENTITY列的表,想要重置下一個值,可以使用以下命令:
ALTER TABLE <table name>
ALTER COLUMN <column name>
RESTART WITH <new value to restart with>;
为方便访客而转换自评论
从这条消息中并不清楚正确的语法是什么。正确的语法是:
ALTER SEQUENCE product_id_seq RESTART WITH 1453;
2021年,Postgres 11.12
ALTER SEQUENCE 对我没有起作用,它以某种方式将其重置为 null。
适用于我的是:
SELECT setval('<table>_<column>_seq', 5);
如果您想从GUI中重置自动增量,请按照以下步骤进行。