首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PostgreSQL 11可重复读取隔离级别

PostgreSQL 11可重复读取隔离级别
EN

Stack Overflow用户
提问于 2019-02-16 08:42:01
回答 1查看 362关注 0票数 2

我试图理解PostgreSQL隔离级别的实现,但我不能理解我做错了什么。我使用本地的PostgreSQL 11和DBeaver 5.3.4作为我的集成开发环境。

下面是我正在测试的场景:

代码语言:javascript
复制
CREATE SCHEMA Test;
CREATE TABLE Test.T1 (Col1 INT PRIMARY KEY, Col2 CHAR(2) NOT NULL);
INSERT INTO Test.T1 (Col1, Col2) VALUES (1,'A'), (2,'B'), (3,'C');

我打开了两个到数据库的并发连接窗口。在第一个命令中,我发出以下命令:

代码语言:javascript
复制
BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ;
SELECT * FROM Test.T1 WHERE Col1 = 2;

我得到了预期的结果: 2-'B‘。然后,在一个单独的窗口中,我发出以下命令:

代码语言:javascript
复制
BEGIN TRANSACTION;
UPDATE Test.T1 SET Col2 = 'XX' WHERE Col1 = 2;

现在,如果切换回第一个窗口,并发出相同的SELECT命令:

代码语言:javascript
复制
SELECT * FROM Test.T1 WHERE Col1 = 2;

由于事务是以可重复读取隔离启动的,因此我希望看到数据快照的结果,并获得2-'B‘的可重复读取,但实际上,我获得了Col2 = 2-'xx’的更新值。

这里我漏掉了什么?

提前感谢您的帮助,祝您周末愉快!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-19 00:46:52

感谢@NickBarnes的建议,我追踪到了IDE设置并找到了问题所在。事实证明,在默认情况下,DBeaver对所有编辑器窗口都使用相同的底层连接...

如果您需要使用单独的连接,请转到"SQL编辑器“的连接或全局设置,在”连接“下,选中”为每个编辑器使用单独的连接“。我发现这个默认值是一个奇怪的选择,但至少现在我知道原因了。

祝你有美好的一天!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54718766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档