如何在PostgreSQL中复制DDL更改

kx7yvsdv  于 2023-05-17  发布在  PostgreSQL
关注(0)|答案(2)|浏览(136)

在PostgreSQL 9.1中,流式复制是通过流式WAL记录来完成的,这些记录是由主数据上的UPDATE和DELETE生成的。
如何复制DDL更改?这些都不是长城的一部分。

vktxenjb

vktxenjb1#

Postgresql的Write Ahead Log(WAL)does contain DDL.在PostgreSQL中,DDL是事务性的,就像DML一样。一切都经过长城。
参见http://wiki.postgresql.org/wiki/Transactional_DDL_in_PostgreSQL:_A_Competitive_Analysis

gfttwv5a

gfttwv5a2#

为了详细说明科林的答案,几乎所有的东西都要经过预写日志。它是一个块级日志,记录将对任何数据库结构进行的每一次写入。对数据目录任何部分的每次更改都首先记录在WAL中。这是因为WAL的主要目的是在系统崩溃或断电时允许重放更改,因此它需要记录每个计划的磁盘写入。
在PostgreSQL中,表、视图等只是系统目录表中的条目。对这些目录的更改会与其他所有内容沿着被写入日志。数据库创建也是如此; db只是pg_database和相应目录结构中的一个条目。
VACUUMCLUSTERTRUNCATE等对表格所做的更改;它们都通过WAL,或者使用块级更改记录,或者使用特殊的WAL条目来描述操作。
只有少数非耐用品不会通过WAL,例如:

  • UNLOGGEDTEMPORARY表的更改
  • 磁盘排序的临时文件

相关问题