2ndQuadrant / pglogical

Logical Replication extension for PostgreSQL 15, 14, 13, 12, 11, 10, 9.6, 9.5, 9.4 (Postgres), providing much faster replication than Slony, Bucardo or Londiste, as well as cross-version upgrades.

Home Page:http://2ndquadrant.com/en/resources/pglogical/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

I use pglogical to distribute data, but there are more table structures in subscriptions.

Jerry-Freelancer opened this issue · comments

My publisher has four tables and two replication sets, Repset1 (T1, T2) and Repset2 (T3, T4).

select pglogical.create_replication_set('repset1');
select pglogical.create_replication_set('repset2');

select pglogical.replication_set_add_table('repset1','t1');
select pglogical.replication_set_add_table('repset1','t2');

select pglogical.replication_set_add_table('repset2','t3');
select pglogical.replication_set_add_table('repset2','t4');
pgdb=# select * from tables;
 relid | nspname | relname | set_name
-------+---------+---------+----------
 32005 | public  | t1      | repset1
 32010 | public  | t2      | repset1
 32020 | public  | t4      | repset2
 32015 | public  | t3      | repset2
(4 rows)

The command at the subscriber is

SELECT pglogical.create_subscription(
    subscription_name := 'subscription1',
    synchronize_structure := true,
    provider_dsn := 'host=192.168.5.171 port=5432 user=pguser password=123456 dbname=pgdb',
    replication_sets := array['repset1']
);

The subscriber correctly synchronized the table structure and data of T1 and T2, but did synchronize the table structure of T3 and T4.

pgdb01=# \d
       List of relations
 Schema | Name | Type  | Owner
--------+------+-------+--------
 public | t1   | table | pguser
 public | t2   | table | pguser
 public | t3   | table | pguser
 public | t4   | table | pguser
(4 rows)

pgdb01=# select * from t1;
 id | name
----+------
  1 | a
  2 | b
  3 | c
(3 rows)

pgdb01=# select * from t2;
 id | name
----+------
 11 | aa
 22 | bb
 33 | cc
(3 rows)

pgdb01=# select * from t3;
 id | name
----+------
(0 rows)

pgdb01=# select * from t4;
 id | name
----+------

If I set synchronize_structure to false and manually create the table structure, it is correct, and only the table structure and data of T1 and T2 will be synchronized, but this seems to increase the workload and does not conform to the corresponding relationship between the publication set and the table.