gpt4 book ai didi

postgresql - PostgreSQL 自动增量是否可能出现竞争条件

转载 作者:行者123 更新时间:2023-11-29 11:24:55 24 4
gpt4 key购买 nike

在使用典型的自动递增字段在表中创建的记录是否可以乱序读取?

例如,当值 9 的记录对选择查询不可见时,值 10 的记录是否会出现在选择查询的结果中?

我的问题的目的是......我想知道使用从一个查询中检索到的最大值作为下限来识别以后查询中以前未检索到的值是否可靠,或者这是否可能会遗漏一行?

如果这种竞争条件在某些情况下是可能的,那么是否有任何可用于选择查询的隔离级别不受该问题的影响?

最佳答案

是的,你能想到它真好。

给定一些表,您可以使用三个并发的 psql session 简单地演示这一点

CREATE TABLE x (
seq serial primary key,
n integer not null
);

然后

SESSION 1                    SESSION 2                       SESSION 3
BEGIN;
BEGIN;
INSERT INTO x(n) VALUES(1)
INSERT INTO x(n) VALUES (2);
COMMIT;
SELECT * FROM x;
COMMIT;
SELECT * FROM x;

假设对于任何生成的值 n,所有生成的值 n-1 都已被已提交的对象使用,这是安全的或已经中止的xacts。在您看到 n 后,它们可能正在进行并提交。

我认为隔离级别在这里对您没有真正的帮助。 SERIALIZABLE 没有相互依赖性来检测。

这部分是添加逻辑解码的原因,因此您可以获得按提交顺序一致的流。

关于postgresql - PostgreSQL 自动增量是否可能出现竞争条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44174231/

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