gpt4 book ai didi

node.js - 顺序递增跳数

转载 作者:行者123 更新时间:2023-11-29 12:02:00 27 4
gpt4 key购买 nike

ID | info
---------
1 | xxx
2 | xxx
4 | xxx

我在 PostgreSQL 中有一个与此类似的设置。 (我使用的是运行 Mojavemac,如果有区别的话)。

我还有几列,但问题是 ID 列。这被设置为顺序的,所以我使用 Express 插入到数据库中。

问题是,即使插入失败,它也会在每次插入时增加 IDinfo 被定义为 unique,因此尝试插入现有的 info 会返回错误。但是 ID 仍然递增。

例如,如果我插入 2 行,我有 id 1id 2。然后另一个因独特的违规而失败。下一个成功的插入得到 id = 4,跳过 id = 3

我能否设置 Postgres,使其不会在插入失败时递增?

最佳答案

serial 列,或 Postgres 10 或更高版本中的 IDENTITY,从 SEQUENCE 中提取数字,并且预计会有间隙。他们的工作是使用唯一编号实现并发写入访问 - 不一定无间隙编号。

如果您实际上没有并发写入权限,有一些简单的方法可以实现(大部分)无间隙数字。喜欢:

INSERT INTO tbl (info) 
SELECT 'xxx'
WHERE NOT EXISTS (SELECT FROM tbl WHERE info = 'xxx');

这不会从 SEQUENCE 中刻录序列号,因为重复的插入被跳过了。 (INSERT 可能仍会因任何其他原因而失败 - 并刻录序列号。在这种情况下,您可以重置SEQUENCE:

在单个语句中插入多行时,您还必须排除插入的集合中的重复项。示例代码:

但是如果您确实有并发写入,原则上,以上都不能可靠地工作。您最好学会接受 ID 中的差距。您始终可以使用 row_number() OVER (ORDER BY id) 进行查询,以在事后生成无缝数字。然而,这些数字在一定程度上仍然是任意的。较小的数字不一定较早提交。并发写入负载下存在异常。相关:

或者考虑使用 UUID(dat 类型 uuid)并避免在 巨大 key 空间中具有随机值的重复项的固有问题。一点也不系列,不过:

关于node.js - 顺序递增跳数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53642512/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com