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

ALTER TABLE product AUTO_INCREMENT = 1453

AND

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

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


当前回答

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

其他回答

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

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

如果您使用id列创建了表product,那么序列就不是简单地称为product,而是product_id_seq(即${table}_${column}_seq)。

这是你需要的ALTER SEQUENCE命令:

ALTER SEQUENCE product_id_seq RESTART WITH 1453

您可以使用psql中的\ds命令查看数据库中的序列。如果您执行\d product并查看列的默认约束,那么nextval(…)调用也将指定序列名。

2021年Postgres 11.12

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

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

我不确定以上所有的答案, 如果我没有序列名呢? 如果我不想截断我的表呢?

下面的查询帮助我做到这一点,而不影响现有的数据。

ALTER TABLE <<table_name>>
    ALTER COLUMN <<primary_key_column_name>> RESTART SET START 4044;

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