4

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

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

4

2 回答 2

6

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

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

于 2012-10-29T15:04:55.917 回答
4

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

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

由 、 等对表格进行VACUUMCLUSTER更改TRUNCATE;它们都经过 WAL,要么带有块级更改记录,要么带有特殊的 WAL 条目来描述操作。

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

  • 更改UNLOGGEDTEMPORARY
  • 用于磁盘排序的临时文件
于 2012-10-29T23:30:15.860 回答