我想强制一个表的自动增量字段为某个值,我试着用这个:
ALTER TABLE product AUTO_INCREMENT = 1453
和
ALTER SEQUENCE product RESTART WITH 1453;
ERROR: relation "your_sequence_name" does not exist
我是postgres的新手:(
我有一张桌子product
与Id
和name
字段
如果您使用product
列创建表id
,那么序列不仅仅被称为product
,而是product_id_seq
(即${table}_${column}_seq
)。
这是您需要的ALTER SEQUENCE
命令:
ALTER SEQUENCE product_id_seq RESTART WITH 1453
您可以使用psql中的\ds
命令查看数据库中的序列。如果你执行\d product
并查看列的默认约束,nextval(...)
调用也将指定序列名称。
要使用序列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
这是您要查找的命令,假设产品表的序列是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
参数是表名和列名。
或者只是在\d product
提示符下发出psql
:
=> \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;
如果要从GUI重置自动增量,请按照以下步骤操作。
- 更改序列的起始值
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
要重置自动增量,您必须使用以下查询来获取序列名称。
句法:
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;
如果您有一个IDENTITY列的表要重置下一个值,则可以使用以下命令:
ALTER TABLE <table name>
ALTER COLUMN <column name>
RESTART WITH <new value to restart with>;