某些 DDL 命令,目前只有 TRUNCATE
和 ALTER TABLE
的表重写形式,不是 MVCC 安全的。这意味着在截断或重写提交之后,如果并发事务使用的是在 DDL 命令提交之前拍摄的快照,则该表对于这些并发事务将显示为空。这只会对在 DDL 命令开始之前没有访问过该表的事务造成问题——任何这样做过的事务都将至少持有 ACCESS SHARE
表锁,这将阻塞 DDL 命令直到该事务完成。因此,这些命令不会在目标表的连续查询中引起表内容的任何明显不一致,但它们可能会导致目标表与数据库中其他表的内容之间出现可见的不一致。
热备复制目标(在第 26.4 节中描述)尚未添加对可序列化事务隔离级别的支持。热备模式下目前支持的最严格的隔离级别是可重复读。虽然在主节点上使用可序列化事务执行所有永久数据库写入将确保所有备节点最终达到一致状态,但在备节点上运行的可重复读事务有时可能会看到与主节点上事务的任何串行执行都不一致的瞬态状态。
对系统目录的内部访问不是使用当前事务的隔离级别完成的。这意味着新创建的数据库对象(例如表)对于并发的可重复读和可序列化事务是可见的,即使它们包含的行不可见。相反,显式检查系统目录的查询在较高的隔离级别下看不到表示并发创建的数据库对象的行。
如果您在文档中发现任何不正确、与特定功能的体验不符或需要进一步澄清的内容,请使用此表单报告文档问题。