2

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

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

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

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

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

4

3 回答 3

2

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

ALTER SEQUENCE <tableName>_id_seq RESTART;

希望这可以帮助

于 2020-05-25T21:22:47.243 回答
1

这是我在我的 sql 中从我的数据库重新启动索引的示例。我在重置实体以对我的 api 进行单元测试时使用此代码。

在我的数据库中,我有一个表格终端

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

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

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');

希望能帮助到你。

于 2020-05-25T21:19:51.803 回答
1

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

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

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

于 2020-05-25T23:37:35.887 回答