如何在PostgreSQL中复制DDL更改

时间:2012-10-29 14:57:38

标签: database postgresql replication

在PostgreSQl 9.1中,流复制是通过流式传输WALs记录完成的,这些记录由Master的数据上的UPDATE和DELETE生成。

如何复制DDL更改?那些不是WALs的一部分。

2 个答案:

答案 0 :(得分:6)

Postgresql的预写日志(WAL) 包含DDL。在Postgresql中,DDL是事务性的,就像DML一样。所有人都通过了WAL。

请参阅http://wiki.postgresql.org/wiki/Transactional_DDL_in_PostgreSQL:_A_Competitive_Analysis

答案 1 :(得分:4)

要详细说明Colin的答案,几乎所有都会通过预写日志。它是一个块级日志,记录将对任何数据库结构进行的每次写入。对数据目录任何部分的每次更改都首先记录在WAL中。这是因为WAL的主要目的是允许在系统崩溃或断电时重放更改,因此需要记录每一个计划的磁盘写入。

在PostgreSQL中,表,视图等只是系统目录表中的条目。对这些目录的更改将与其他所有内容一起记录。数据库创建也是如此; db只是pg_database中的一个条目和相应的目录结构。

VACUUMCLUSTERTRUNCATE等对表格所做的更改;它们都通过WAL,可以使用块级更改记录或特殊的WAL条目来描述操作。

只有少数不耐用的东西不通过WAL,例如:

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