【发布时间】:2012-10-29 14:57:37
【问题描述】:
在 PostgreSQl 9.1 中,流式复制是通过流式 WAL 记录完成的,这些记录由主数据上的 UPDATE 和 DELETE 生成。
如何复制 DDL 更改?这些不是 WAL 的一部分。
【问题讨论】:
标签: database postgresql replication
在 PostgreSQl 9.1 中,流式复制是通过流式 WAL 记录完成的,这些记录由主数据上的 UPDATE 和 DELETE 生成。
如何复制 DDL 更改?这些不是 WAL 的一部分。
【问题讨论】:
标签: database postgresql replication
Postgresql 的预写日志 (WAL)确实包含 DDL。在 Postgresql 中,DDL 是事务性的,就像 DML 一样。一切都通过 WAL。
见http://wiki.postgresql.org/wiki/Transactional_DDL_in_PostgreSQL:_A_Competitive_Analysis
【讨论】:
为了详细说明 Colin 的回答,几乎所有内容都会经过预写日志。它是一个块级日志,记录将对任何数据库结构进行的每次写入。对数据目录任何部分的每次更改都会首先记录在 WAL 中。这是因为 WAL 的主要目的是在系统崩溃或断电时允许重播更改,因此它需要记录每个计划的磁盘写入。
在 PostgreSQL 中,表、视图等只是系统目录表中的条目。对这些目录的更改会与其他所有内容一起被预先写入记录。数据库创建也是如此;一个 db 只是pg_database 中的一个条目和相应的目录结构。
VACUUM、CLUSTER、TRUNCATE 等对表格的更改;它们都经过 WAL,要么带有块级更改记录,要么带有特殊的 WAL 条目来描述操作。
只有少数非耐用的东西不会通过 WAL,例如:
UNLOGGED 和 TEMPORARY 表【讨论】: