在PostgreSQl 9.1中,流复制是通过流式传输WALs记录完成的,这些记录由Master的数据上的UPDATE和DELETE生成。
如何复制DDL更改?那些不是WALs的一部分。
答案 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
中的一个条目和相应的目录结构。
VACUUM
,CLUSTER
,TRUNCATE
等对表格所做的更改;它们都通过WAL,可以使用块级更改记录或特殊的WAL条目来描述操作。
只有少数不耐用的东西不通过WAL,例如:
UNLOGGED
和TEMPORARY
表格