从头开始逻辑复制

时间:2021-03-23 16:51:03

标签: postgresql

我试图了解如何从一开始就在 postgres 上开始逻辑复制。我正在尝试使用这个 python 库 psycopg (https://www.psycopg.org/docs/index.html) 并进行所有设置……但我只捕获表的新更改,而不是其中的当前数据。我假设我需要指定 LSN 开始于 (doc: https://www.psycopg.org/docs/extras.html?highlight=loggingconnection#psycopg2.extras.ReplicationMessage.data_start)...但是如何获得 LSN 的开始?

通过基本的python脚本看起来像这样:

import json
import random
import calendar
import time
from datetime import datetime
import psycopg2
from psycopg2.extras import LogicalReplicationConnection

my_connection  = psycopg2.connect(
                   "dbname='dbname' host='host.com' user='user' password='pass'" ,
                   connection_factory = LogicalReplicationConnection)
cur = my_connection.cursor()
cur.drop_replication_slot('wal2json_test_slot')
cur.create_replication_slot('wal2json_test_slot', output_plugin = 'wal2json')
cur.start_replication(slot_name = 'wal2json_test_slot', options = {'pretty-print' : 1}, decode= True)

def consume(msg):
    print (msg.payload)

cur.consume_stream(consume)

1 个答案:

答案 0 :(得分:0)

您不能从最初创建插槽之前的点开始流式传输。

要获取预先存在的数据,只需打开与数据库的第二个连接,然后使用 SELECT 或 COPY 读取现有数据。