我想强制一个表的自动增量字段的一些值,我尝试了这样:
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和名称字段
当前回答
如果表格是这样的
bigint NOT NULL GENERATED ALWAYS AS IDENTITY ( INCREMENT 1 START 0)
插入0-9范围内的记录后,会导致下次插入时发生冲突,因此重置START:
ALTER TABLE ... ALTER COLUMN ... RESTART WITH 10;
其他回答
使用这个查询来检查什么是序列键与模式和表,
SELECT pg_get_serial_sequence('"SchemaName"."TableName"', 'KeyColumnName'); // output: "SequenceKey"
使用这个查询逐个增加增量值,
SELECT nextval('"SchemaName"."SequenceKey"'::regclass); // output 110
当插入到下一个表时,增量值将被用作键(111)。
使用此查询将特定值设置为增量值
SELECT setval('"SchemaName"."SequenceKey"', 120);
当插入到下一个表时,增量值将被用作键(121)。
设置序列计数器:
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 |
如果你想从GUI重置自动增量,那么按照这个步骤。
进入数据库 点击公共 在表格列表页面,你可以看到像“表”,“视图”,“序列”这样的标签。 点击序列 当你点击“序列”,你可以看到所有的序列列表,点击任何你想重置 之后,你可以看到多种选择,如“改变”,“设置值”,“重新启动”,“重置”等… 然后点击重置,然后添加一个新行。
我不确定以上所有的答案, 如果我没有序列名呢? 如果我不想截断我的表呢?
下面的查询帮助我做到这一点,而不影响现有的数据。
ALTER TABLE <<table_name>>
ALTER COLUMN <<primary_key_column_name>> RESTART SET START 4044;
下面的命令会自动执行此操作:这也会删除表中的所有数据。所以要小心。
TRUNCATE TABLE someTable RESTART IDENTITY;