加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

PostgreSQL自动增量是否可以实现竞争条件

发布时间:2020-12-13 16:00:51 所属栏目:百科 来源:网络整理
导读:是否存在使用典型自动增量字段在表中创建的记录可用于按顺序读取的条件? 例如,当值为9的记录对选择查询不可见时,值为10的记录是否会出现在选择查询的结果中? 我的问题的目的是……我想知道使用从一个查询中检索到的最大值作为下限来识别以后查询中先前未检
是否存在使用典型自动增量字段在表中创建的记录可用于按顺序读取的条件?

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

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

如果在某些情况下可能存在这种竞争条件,那么可以用于对该问题免疫的选择查询的任何隔离级别是什么?

解决方法

是的,并且善于考虑它.

在给定一些表的情况下,您可以通过三个并发的psql会话来简单地演示这一点

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已被已提交或已经中止的xact使用是不安全的.你看到n之后,它们可能正在进行中.

我不认为隔离级别对你有帮助. SERIALIZABLE没有相互依赖性来检测.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读