Rad*_*Rad 195 sql postgresql reset auto-increment
我想强制一个表的自动增量字段为某个值,我试着用这个:
ALTER TABLE product AUTO_INCREMENT = 1453
Run Code Online (Sandbox Code Playgroud)
和
ALTER SEQUENCE product RESTART WITH 1453;
ERROR: relation "your_sequence_name" does not exist
Run Code Online (Sandbox Code Playgroud)
我是postgres的新手:(
我有一个表product
与Id
和name
领域
ara*_*nid 258
如果product
使用id
列创建表,则不会简单地调用序列product
,而是product_id_seq
(即${table}_${column}_seq
).
这是ALTER SEQUENCE
您需要的命令:
ALTER SEQUENCE product_id_seq RESTART WITH 1453
Run Code Online (Sandbox Code Playgroud)
您可以使用\ds
psql中的命令查看数据库中的序列.如果您这样做\d product
并查看列的默认约束,则nextval(...)
调用也将指定序列名称.
Loo*_*oii 114
以下命令会自动为您执行此操作:这也将删除表中的所有数据.所以要小心.
TRUNCATE TABLE someTable RESTART IDENTITY;
Run Code Online (Sandbox Code Playgroud)
Clo*_*eto 53
要设置序列计数器:
setval('product_id_seq', 1453);
Run Code Online (Sandbox Code Playgroud)
如果您不知道序列名称,请使用以下pg_get_serial_sequence
函数:
select pg_get_serial_sequence('product', 'id');
pg_get_serial_sequence
------------------------
public.product_id_seq
Run Code Online (Sandbox Code Playgroud)
参数是表名和列名.
或者只是\d product
在psql
提示符处发出:
=> \d product
Table "public.product"
Column | Type | Modifiers
--------+---------+------------------------------------------------------
id | integer | not null default nextval('product_id_seq'::regclass)
name | text |
Run Code Online (Sandbox Code Playgroud)
bef*_*bry 31
-- Change the starting value of the sequence
ALTER SEQUENCE project_id_seq RESTART 3000;
Run Code Online (Sandbox Code Playgroud)
相同但动态:
SELECT SETVAL('project_id_seq', (SELECT MAX(id) + 1 FROM project));
Run Code Online (Sandbox Code Playgroud)
我同意使用 aSELECT
令人不安,但它有效。
来源:https : //kylewbanks.com/blog/Adding-or-Modifying-a-PostgreSQL-Sequence-Auto-Increment
小智 22
要将其设置为下一个最高值,您可以使用:
SELECT SETVAL(pg_get_serial_sequence('table_name', 'column_name'), (SELECT MAX(column_name) FROM table_name));
Run Code Online (Sandbox Code Playgroud)
Bri*_*anB 14
如果您有一个包含 IDENTITY 列的表,您想为其重置下一个值,可以使用以下命令:
ALTER TABLE <table name>
ALTER COLUMN <column name>
RESTART WITH <new value to restart with>;
Run Code Online (Sandbox Code Playgroud)
hum*_*olf 14
2021 年,Postgres 11.12
ALTER SEQUENCE 对我不起作用,它以某种方式将其重置为空。对我有用的是:
SELECT setval('<table>_<column>_seq', 5);
Run Code Online (Sandbox Code Playgroud)
Anw*_*war 12
为了方便访客而转换自评论
从这条消息中不清楚正确的语法是什么.它是:
ALTER SEQUENCE product_id_seq RESTART WITH 1453;
Run Code Online (Sandbox Code Playgroud)
如果要从 GUI重置自动增量,请按照以下步骤操作。
小智 5
要重置自动增量,您必须使用以下查询获取序列名称。
句法:
SELECT pg_get_serial_sequence(‘tablename’, ‘ columnname‘);
Run Code Online (Sandbox Code Playgroud)
例子:
SELECT pg_get_serial_sequence('demo', 'autoid');
Run Code Online (Sandbox Code Playgroud)
查询将返回autoid的序列名称为“Demo_autoid_seq” 然后使用以下查询重置autoid
句法:
ALTER SEQUENCE sequenceName RESTART WITH value;
Run Code Online (Sandbox Code Playgroud)
例子:
ALTER SEQUENCE "Demo_autoid_seq" RESTART WITH 1453;
Run Code Online (Sandbox Code Playgroud)
小智 5
要获取序列 ID,请使用
SELECT pg_get_serial_sequence('tableName', 'ColumnName');
Run Code Online (Sandbox Code Playgroud)
这将为您提供 sequensce id 作为tableName_ColumnName_seq
要获取最后的种子号,请使用
select currval(pg_get_serial_sequence('tableName', 'ColumnName'));
Run Code Online (Sandbox Code Playgroud)
或者如果您知道序列 ID 已经直接使用它。
select currval(tableName_ColumnName_seq);
Run Code Online (Sandbox Code Playgroud)
它会给你最后的种子号
要重置种子数,请使用
ALTER SEQUENCE tableName_ColumnName_seq RESTART WITH 45
Run Code Online (Sandbox Code Playgroud)
使用此查询来检查架构和表的序列键是什么,
SELECT pg_get_serial_sequence('"SchemaName"."TableName"', 'KeyColumnName'); // output: "SequenceKey"
Run Code Online (Sandbox Code Playgroud)
使用此查询将增量值一一增加,
SELECT nextval('"SchemaName"."SequenceKey"'::regclass); // output 110
Run Code Online (Sandbox Code Playgroud)
插入表时,下一个递增的值将用作键 (111)。
使用此查询将特定值设置为递增值
SELECT setval('"SchemaName"."SequenceKey"', 120);
Run Code Online (Sandbox Code Playgroud)
插入表时,下一个递增的值将用作键 (121)。
归档时间: |
|
查看次数: |
156161 次 |
最近记录: |