保持事务期间可用的数据(PostgreSQL)

问题描述 投票:0回答:1

为什么我在使用截断语句的事务期间不能访问数据?

我虽然有可能在同一个表上运行事务时读取表的数据。只要您不执行截断语句就可以。而且我在文档中没有发现任何与之相反的东西。

这里有一个示例项目来说明这种行为,自述文件试图解释如何重现:https://github.com/Haelle/pg_transaction_tests

如果不应该发生,可能是? :

  • 我的代码...
  • ActiveRecord
  • 宝石pg
  • Postgresql中的一个选项
ruby-on-rails postgresql transactions truncate pg
1个回答
0
投票

The documentation状态:

[TRUNCATE在对其操作的每个表上获取一个ACCESS EXCLUSIVE锁,这将阻止该表上的所有其他并发操作。

这甚至会阻止ACCESS SHARE所需的SELECT锁定。

这是必要的,因为该表在该操作期间接收到一个新文件(旧文件在COMMIT时被删除。

如果您需要一个不会阻塞并发阅读器的操作,请使用(价格昂贵得多)

DELETE FROM tablename;
© www.soinside.com 2019 - 2024. All rights reserved.