为什么我在使用截断语句的事务期间不能访问数据?
我虽然有可能在同一个表上运行事务时读取表的数据。只要您不执行截断语句就可以。而且我在文档中没有发现任何与之相反的东西。
这里有一个示例项目来说明这种行为,自述文件试图解释如何重现:https://github.com/Haelle/pg_transaction_tests
如果不应该发生,可能是? :
[
TRUNCATE
在对其操作的每个表上获取一个ACCESS EXCLUSIVE
锁,这将阻止该表上的所有其他并发操作。
这甚至会阻止ACCESS SHARE
所需的SELECT
锁定。
这是必要的,因为该表在该操作期间接收到一个新文件(旧文件在COMMIT
时被删除。
如果您需要一个不会阻塞并发阅读器的操作,请使用(价格昂贵得多)
DELETE FROM tablename;