Postgres 逻辑复制初始同步过程非常缓慢,尤其是在原始数据库很大的情况下。
我想知道是否可以从给定的 LSN 开始复制?
所需的工作流程将是
- 从源数据库获取当前 LSN
- 在源数据库中创建所需对象的逻辑转储
- 在目标数据库上恢复转储
- 从步骤 1 中获取的 LSN 开始逻辑复制
我没有找到任何允许第 4 步的文档,有人知道是否可能吗?
Postgres 逻辑复制初始同步过程非常缓慢,尤其是在原始数据库很大的情况下。
我想知道是否可以从给定的 LSN 开始复制?
所需的工作流程将是
我没有找到任何允许第 4 步的文档,有人知道是否可能吗?
文档给了你一个提示:
当使用流复制接口(参见 参考资料)创建新的复制槽时
CREATE_REPLICATION_SLOT
,会导出一个快照(参见第 9.27.5 节),它将准确显示数据库的状态,之后所有更改都将包含在更改流中。这可用于通过在SET TRANSACTION SNAPSHOT
创建槽时读取数据库的状态来创建新副本。然后可以使用此事务转储该时间点的数据库状态,然后可以使用插槽的内容对其进行更新而不会丢失任何更改。
所以步骤是:
启动到数据库的复制连接。
跑
CREATE_REPLICATION_SLOT slot_name LOGICAL pgoutput;
创建一个复制槽。保持连接打开。
利用
pg_dump --snapshot=snapshotname ...
在该快照处转储数据库。您可以在复制连接开始后关闭它。
将转储还原到目标数据库。
使用复制槽开始复制。