将 Postgres 自动增量值重置为 0

Reset Postgres auto-increment value to 0

我有一个 table,有时我会在内联编辑器中输入数据,我会在其中手动添加通常自动递增的 id 值。

在使用脚本自动生成 id 4 然后内联添加 id 5 和 6 的情况下,每当我 运行 插入查询时,数据库都会尝试自动增加值 4。但是值5 已由用户使用内联编辑器添加到数据库中。在这种情况下,我使用了如下脚本

SELECT SETVAL('<tableName>_id_seq', (SELECT MAX(id) FROM <tableName>));

然后自动递增值被分配给数据库当前包含的最大id值,从而成功地为插入查询自动递增。

我面临的问题是,每当我清除数据库时,是否有一种方法可以将自动增量值重置为 0 或其他值,以便下一个插入查询将开始向 id 插入值 1专栏?

这是我 sql 从我的数据库重新启动索引的示例。 我在重置实体以对我的 api.

进行单元测试时使用此代码

在我的数据库中我有一个 table 终端:

CREATE TABLE IF NOT EXISTS terminal(
    id SERIAL PRIMARY KEY,
    "serialNumber" VARCHAR(255),
    "storeCode" VARCHAR(100),
    "modelCode" VARCHAR(31)
);

它将创建一个带有主键 terminal_id_seq 的 table。

ALTER SEQUENCE terminal_id_seq RESTART WITH 1;
DELETE FROM terminal;
--redo the inserts
INSERT INTO terminal ("id", "serialNumber", "storeCode","modelCode") VALUES (10,'abc','def','blabla');

希望对您有所帮助。

我的问题似乎找到了方便的答案

ALTER SEQUENCE <tableName>_id_seq RESTART;

希望对您有所帮助

如上所述,有多种方法可以做到这一点,但如果您想要一种更幂等的方法(您就是这样做的),那么我建议:

SELECT SETVAL('<tableName>_id_seq', COALESCE((SELECT MAX(id) FROM <tableName>),1));

这样,无论 table 中是否有行,您都可以使用相同的代码,并且它会做正确的事情。