gpt4 book ai didi

PostgreSQL 事务隔离 READ UNCOMMITTED

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

我想尝试使用带有 pgadmin 的 PostgreSQL 进行事务隔离。首先,我在 BEGIN 中插入了一条新记录,但没有提交。

BEGIN;
INSERT INTO my_table(id,value) VALUES (1,'something');

//UNCOMMITTED

然后,我尝试读取未提交的数据

BEGIN TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT * FROM my_table
COMMIT;

但是我找不到新的记录。怎么了?

最佳答案

PostgreSQL 不支持脏读(READ UNCOMMITTED)。正如@a_horse_with_no_name 指出的那样,the manual说:

The SQL standard defines one additional level, READ UNCOMMITTED. In PostgreSQL READ UNCOMMITTED is treated as READ COMMITTED.

这符合标准中的规则,即数据库必须将不受支持的隔离级别视为最强的受支持级别。

在 PostgreSQL 中,不支持从正在进行的事务中读取未提交的元组的方法。如果有,您将能够获得诸如主键的重复值和一般困惑之类的东西,所以无论如何它都不会很有用。

几种正在进行的事务可以相互通信和影响的方式:

  • 通过共享客户端应用程序(当然)
  • SEQUENCE(和 SERIAL)更新立即发生,而不是在提交时
  • advisory locking
  • 正常的行和表锁定,但在 READ COMMITTED 可见性规则范围内
  • UNIQUEEXCLUSION 约束

可以使用仅限 super 用户的调试工具(如 pageinspect)查看未提交的元组数据。 ,但前提是您真正了解数据存储的内部结构。它仅适用于数据恢复和调试。您会在一堵十六进制输出墙中看到多个版本的数据。

关于PostgreSQL 事务隔离 READ UNCOMMITTED,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33646012/

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