我想强制一个表的自动增量字段的一些值,我尝试了这样:

ALTER TABLE product AUTO_INCREMENT = 1453

AND

ALTER SEQUENCE product  RESTART WITH 1453;
ERROR:  relation "your_sequence_name" does not exist

我有一个表产品与Id和名称字段


当前回答

要将其设置为下一个最大值,您可以使用:

SELECT SETVAL(pg_get_serial_sequence('table_name', 'column_name'), (SELECT MAX(column_name) FROM table_name));

其他回答

如果你有一个带有IDENTITY列的表,你想要重置下一个值,你可以使用以下命令:

ALTER TABLE <table name> 
    ALTER COLUMN <column name> 
        RESTART WITH <new value to restart with>;

2021年Postgres 11.12

ALTER SEQUENCE没有为我工作,它以某种方式将其重置为null。 对我有用的是:

SELECT setval('<table>_<column>_seq', 5);

要将其设置为下一个最大值,您可以使用:

SELECT SETVAL(pg_get_serial_sequence('table_name', 'column_name'), (SELECT MAX(column_name) FROM table_name));

注意,如果表名带有'_',它将在序列名中被删除。

例如,表名:user_tokens列:id 序列名称:usertokens_id_seq

获取序列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