postgresql postgres逻辑复制从给定的LSN开始

eanckbw9  于 2024-01-07  发布在  PostgreSQL
关注(0)|答案(2)|浏览(187)

Postgres逻辑复制初始同步是非常缓慢的过程,特别是如果原始数据库非常大。
我想知道是否可以从给定的LSN开始复制?
所需的工作流程将是
1.从源数据库获取当前LSN
1.在源数据库中创建所需对象的逻辑转储
1.在目标数据库上恢复转储
1.从步骤1中获取的LSN启动逻辑复制
我没有找到任何文档允许步骤4,有人知道这是否可能吗?

idfiyjo8

idfiyjo81#

文档给了你一个提示:
使用流式复制接口创建新的复制插槽时(请参见CREATE_REPLICATION_SLOT),将导出快照(见第9.27.5节),这将准确显示数据库的状态,之后所有更改都将包含在更改流中。这可以用于创建新的副本,方法是使用SET TRANSACTION SNAPSHOT读取创建插槽时的数据库状态。这事务可以用来转储数据库在该时间点的状态,之后可以使用槽的内容更新状态,而不会丢失任何更改。
所以步骤是:

  • 启动与数据库的复制连接:
psql "dbname=yourdatabasename replication=database"

字符串

  • 创建一个复制插槽并从输出中复制快照名称。在下一步之前保持连接打开状态非常重要,否则快照将不复存在
CREATE_REPLICATION_SLOT slot_name LOGICAL pgoutput;

  • 使用以下命令转储快照中的数据库。一旦启动,您可以关闭复制连接
pg_dump --snapshot=snapshotname [...]

  • 将转储还原到目标数据库。
  • 使用复制插槽启动复制。
wfypjpf4

wfypjpf42#

试试这个方法:

BEGIN TRANSACTION REPEATABE READ;

字符串
要创建逻辑复制插槽,请使用pg_export_snapshot()
在另一个会话中-启动pg_dump with --snapshot=<snapshot_id>。(不确定-你应该等到pg_dump结束),然后,

COMMIT;


然后转储和插槽将位于同一个LSN,您可以订阅它。
标签:https://www.percona.com/blog/how-to-convert-postgresql-streaming-replication-to-logical-replication/

相关问题