2

Postgres 逻辑复制初始同步过程非常缓慢,尤其是在原始数据库很大的情况下。

我想知道是否可以从给定的 LSN 开始复制?

所需的工作流程将是

  1. 从源数据库获取当前 LSN
  2. 在源数据库中创建所需对象的逻辑转储
  3. 在目标数据库上恢复转储
  4. 从步骤 1 中获取的 LSN 开始逻辑复制

我没有找到任何允许第 4 步的文档,有人知道是否可能吗?

4

1 回答 1

4

文档给了你一个提示:

当使用流复制接口(参见 参考资料)创建新的复制槽时CREATE_REPLICATION_SLOT,会导出一个快照(参见第 9.27.5 节),它将准确显示数据库的状态,之后所有更改都将包含在更改流中。这可用于通过在SET TRANSACTION SNAPSHOT创建槽时读取数据库的状态来创建新副本。然后可以使用此事务转储该时间点的数据库状态,然后可以使用插槽的内容对其进行更新而不会丢失任何更改。

所以步骤是:

  • 启动到数据库的复制连接。

  • CREATE_REPLICATION_SLOT slot_name LOGICAL pgoutput;
    

    创建一个复制槽。保持连接打开。

  • 利用

    pg_dump --snapshot=snapshotname ...
    

    在该快照处转储数据库。您可以在复制连接开始后关闭它。

  • 将转储还原到目标数据库。

  • 使用复制槽开始复制。

于 2021-11-30T07:32:31.600 回答