我有一个表,我有时在内联编辑器中输入数据,在这里我手动添加id值,通常是自动递增的。
在使用脚本自动生成id4,然后内联添加id5和id6的情况下,每当我运行insert查询时,db就会尝试自动增加值4。但值5是由用户使用内联编辑器添加到数据库中的。在这种情况下,我使用了如下脚本
SELECT SETVAL('<tableName>_id_seq', (SELECT MAX(id) FROM <tableName>));
然后自动递增值被分配给数据库当前包含的最大id值,从而成功地为insert查询自动递增。
我面临的问题是,每当我清除数据库时,是否有一种方法将自动增量值重置为0或其他值,以便下一个insert查询开始在id列中插入值为1的内容?
3条答案
按热度按时间tpgth1q71#
下面是一个示例,说明如何使用sql从数据库中重新启动索引。我在重置用于单元测试api的实体时使用此代码。
在我的数据库中有一个表终端:
它将创建一个带有主键的表
terminal_id_seq
.希望有帮助。
ncecgwcz2#
看来我找到了一个方便的答案
希望这有帮助
iq0todco3#
如上所述,有很多方法可以做到这一点,但是如果您想要一种更为幂等的方法来做到这一点(确实如此),那么我建议您:
SELECT SETVAL('<tableName>_id_seq', COALESCE((SELECT MAX(id) FROM <tableName>),1));
这样,无论表中是否有行,都可以使用相同的代码,这样做是正确的。