我想将表的自动递增字段强制为某个值,我尝试使用以下方法:
ALTER TABLE product AUTO_INCREMENT = 1453
和
ALTER SEQUENCE product RESTART WITH 1453;
ERROR: relation "your_sequence_name" does not exist
我是Postgres的新手:(
我有一个表product
与Id
和name
领域
我想将表的自动递增字段强制为某个值,我尝试使用以下方法:
ALTER TABLE product AUTO_INCREMENT = 1453
和
ALTER SEQUENCE product RESTART WITH 1453;
ERROR: relation "your_sequence_name" does not exist
我是Postgres的新手:(
我有一个表product
与Id
和name
领域
Answers:
如果您创建product
具有id
列的表,那么该序列将不被简单地称为product
,而是product_id_seq
(即${table}_${column}_seq
)。
这是ALTER SEQUENCE
您需要的命令:
ALTER SEQUENCE product_id_seq RESTART WITH 1453
您可以使用\ds
psql中的命令查看数据库中的序列。如果这样做,\d product
并查看列的默认约束,则nextval(...)
调用还将指定序列名称。
ALTER SEQUENCE yourTableName_yourColumnName_seq RESTART WITH #
,其中“ seq”为原义文本,并为#输入数字。不要忽略下划线。:-)
ALTER SEQUENCE my_schema.product_id_seq RESTART WITH 1453
1453
,则应该这样做RESTART WITH 1454
。
以下命令将自动为您执行此操作:这还将删除表中的所有数据。所以要小心
TRUNCATE TABLE someTable RESTART IDENTITY;
TABLE
关键字是多余的。TRUNCATE someTable RESTART IDENTITY;
足够。
TRUNCATE someTable RESTART IDENTITY CASCADE;
吗?
设置序列计数器:
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 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
brew services restart postgresql
要重置自动增量,您必须使用以下查询来获取序列名称。
句法:
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;
要获取序列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
使用此查询来检查什么是带有架构和表的序列键,
SELECT pg_get_serial_sequence('"SchemaName"."TableName"', 'KeyColumnName'); // output: "SequenceKey"
使用此查询一个一个地增加增量值,
SELECT nextval('"SchemaName"."SequenceKey"'::regclass); // output 110
当插入表格时,下一个增加的值将用作键(111)。
使用此查询将特定值设置为增量值
SELECT setval('"SchemaName"."SequenceKey"', 120);
当插入表格时,下一个增加的值将用作键(121)。