我想强制一个表的自动增量字段的一些值,我尝试了这样:
ALTER TABLE product AUTO_INCREMENT = 1453
AND
ALTER SEQUENCE product RESTART WITH 1453;
ERROR: relation "your_sequence_name" does not exist
我有一个表产品与Id和名称字段
我想强制一个表的自动增量字段的一些值,我尝试了这样:
ALTER TABLE product AUTO_INCREMENT = 1453
AND
ALTER SEQUENCE product RESTART WITH 1453;
ERROR: relation "your_sequence_name" does not exist
我有一个表产品与Id和名称字段
当前回答
要将其设置为下一个最大值,您可以使用:
SELECT SETVAL(pg_get_serial_sequence('table_name', 'column_name'), (SELECT MAX(column_name) FROM table_name));
其他回答
-- 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 |
注意,如果表名带有'_',它将在序列名中被删除。
例如,表名:user_tokens列:id 序列名称:usertokens_id_seq
要重置自动递增,您必须通过使用以下查询获得您的序列名。
语法:
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;
获取序列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