Redrock Postgres 搜索 英文
版本: 9.5 / 9.6 / 10 / 11 / 12 / 13 / 14 / 15 / 16

13.6. 提醒

一些 DDL 命令(当前只有TRUNCATEALTER TABLE的表重写形式)不是 MVCC 安全的。这意味着在截断或者重写提交之后,该表将对并发事务(如果它们使用的快照是在 DDL 命令提交前取得的)呈现出空表的形态。这只对没有在该 DDL 命令开始前访问所讨论的表的事务存在问题 — 任何在 DDL 命令开始前访问过该表的事务将持有至少一个 ACCESS SHARE 表锁,这将阻塞该 DDL 命令直到该事务完成。因此这些命令对于目标表上的连续查询将不会造成任何明显的表内容不一致,但是它们可能导致目标表内容和数据库中其他表内容之间的不一致。

对于可序列化事务隔离级别的支持尚未添加到热备复制目标(在第 27.4 节中描述)。 当前在热备模式下支持的最严格的隔离级别是可重复读。 在主服务器上在可序列化事务中执行所有永久性数据库写操作将确保所有备机最终达到一致状态, 但在备机上运行的可重复读事务有时可能会看到与主服务器上事务的任何串行执行不一致的瞬态状态。

系统目录的内部访问不是使用当前事务的隔离级别来完成的。 这意味着新创建的数据库对象,例如表,对于并发的可重复读和可序列化事务是可见的,即使它们包含的行并非如此。 相比之下,显式检查系统目录的查询不会看到表示并发创建的数据库对象的行,在更高的隔离级别中。