【问题标题】:Is there any way to sync only few tables of two different postgresql database?有没有办法只同步两个不同postgresql数据库的几个表?
【发布时间】:2021-03-18 10:03:22
【问题描述】:

在两个不同的区域有两个 postgresql 表,我想在两个数据库中只同步一个表。有可能吗?

【问题讨论】:

标签: database postgresql synchronization streaming


【解决方案1】:

我用 pgloical 弄明白了他的。

(Docker PostgreSQL) 使用 pglogical 进行双向复制

  1. 启动两个不同端口的 PostgreSQL 容器
    1. docker volume create sync_test_1
    2. docker run --name sync_test_1 -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=qwerty1234 -p 5433:5432 -d -v sync_test_1:/var/lib/postgresql/data postgres:9.5.23
    3. docker volume create sync_test_2
    4. docker run --name sync_test_2 -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=qwerty1234 -p 5434:5432 -d -v sync_test_2:/var/lib/postgresql/data postgres:9.5.23
  2. 进入 PostgreSQL 容器外壳并更新和安装基本工具
    1. docker exec -it sync_test_1 /bin/bash
    2. apt -y update
    3. apt install -y vim
    4. apt install -y procps
    5. 也使用 sync_test_2 执行步骤 1 到 3
  3. 安装 pglogical 包
    1. apt install -y postgresql-9.5-pglogical
  4. 更改 postgresql.conf
    1. vi /var/lib/postgresql/data/postgresql.conf
      1. wal_level = logical
      2. track_commit_timestamp = on在此处输入代码
      3. shared_preload_libraries = ‘pglogical’
      4. max_replication_slots = 10
  5. 重启 PostgreSQL
    1. docker restart sync_test_1
  6. 使用 pglogical
    1. create database localharvest
    2. psql -U postgres localharvest
    3. CREATE EXTENSION pglogical;
    4. SELECT pglogical.create_node(node_name := 'db1_local', dsn := 'host=127.0.0.1 port=5432 dbname=localharvest user=postgres password=qwerty1234');
    5. SELECT * FROM pglogical.replication_set;
    6. SELECT pglogical.replication_set_add_table(‘default’, ‘users’);
    7. ALTER SEQUENCE users_id_seq RESTART WITH 1 INCREMENT 20;
    8. add ‘host replication postgres 172.17.0.1/32 trust’ in /var/lib/postgresql/data/pg_hba.conf
    9. 互相订阅
    10. SELECT pglogical.create_subscription(subscription_name := 'db2_subscription', forward_origins := '{}', provider_dsn := 'host=host.docker.internal port=5434 dbname=localharvest user=postgres password=qwerty1234');

参考:https://eradman.com/posts/active-active-pglogical.html From inside of a Docker container, how do I connect to the localhost of the machine? https://github.com/2ndQuadrant/pglogical https://www.2ndquadrant.com/en/resources/pglogical/pglogical-docs/#Replication-sets

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-01
    • 2010-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多