微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

是否存在使用典型自动增量字段在表中创建的记录可用于按顺序读取的条件?

例如,当值为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没有相互依赖性来检测.

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐