【问题标题】:How are DDL changes replicated in PostgreSQLDDL 更改如何在 PostgreSQL 中复制
【发布时间】:2012-10-29 14:57:37
【问题描述】:

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

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

【问题讨论】:

    标签: database postgresql replication


    【解决方案1】:

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

    http://wiki.postgresql.org/wiki/Transactional_DDL_in_PostgreSQL:_A_Competitive_Analysis

    【讨论】:

      【解决方案2】:

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

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

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

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

      • 更改为 UNLOGGEDTEMPORARY
      • 用于磁盘排序的临时文件

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-07
        • 2020-06-08
        • 1970-01-01
        • 2020-02-09
        • 1970-01-01
        • 1970-01-01
        • 2014-11-11
        • 2019-09-14
        相关资源
        最近更新 更多