gpt4 book ai didi

sql - PostgreSQL 11 可重复读隔离级别

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

我试图理解 PostgreSQL 隔离级别的实现,但无法理解我做错了什么。我正在使用本地 PostgreSQL 11 和 DBeaver 5.3.4 作为我的 IDE。

这是我正在测试的场景:

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');

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

BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ;
SELECT * FROM Test.T1 WHERE Col1 = 2;

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

BEGIN TRANSACTION;
UPDATE Test.T1 SET Col2 = 'XX' WHERE Col1 = 2;

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

SELECT * FROM Test.T1 WHERE Col1 = 2;

由于事务是从可重复读取隔离开始的,我希望看到数据快照的结果,并获得 2-'B' 的可重复读取,但相反,我得到的是 Col2 = 2-' 的更新值xx'.

我在这里错过了什么?

在此先感谢您的帮助,祝周末愉快!

最佳答案

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

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

祝你有美好的一天!

关于sql - PostgreSQL 11 可重复读隔离级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54718766/

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