在postgres中重置自动递增计数器
我想强制一个表的自动增量字段的值,我试着这个:
ALTER TABLE product AUTO_INCREMENT = 1453
和
ALTER SEQUENCE product RESTART WITH 1453; ERROR: relation "your_sequence_name" does not exist
我是新来的postgres 🙁
我有一个表和Id
和name
字段的产品
如果您使用id
列创build表product
,那么序列不是简单地称为product
,而是product_id_seq
(即${table}_${column}_seq
)。
这是您需要的ALTER SEQUENCE
命令:
ALTER SEQUENCE product_id_seq RESTART WITH 1453
您可以使用psql中的\ds
命令查看数据库中的序列。 如果您使用\d product
并查看列的默认约束,则nextval(...)
调用也将指定序列名称。
以下是您正在查找的命令,假定产品表的序列是product_id_seq:
ALTER SEQUENCE product_id_seq RESTART WITH 1453;
以下命令自动为您执行此操作: 这也将删除表中的所有数据。 所以要小心。
TRUNCATE TABLE someTable RESTART IDENTITY;
要设置序列计数器:
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 |
为了游客的方便,从评论转换
从这个消息中不清楚正确的语法是什么。 它是:
ALTER SEQUENCE product_id_seq RESTART WITH 1453;
要重置自动增量,您必须使用以下查询来获取序列名称。
句法:
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;