PostgreSQL逻辑复制之pglogical篇(2)

lottu=# select * from pglogical.replication_set_table ; set_id | set_reloid | set_att_list | set_row_filter --------+------------+--------------+---------------- (0 rows)

方法1:

前面讲解创建复制集中;3.2.2中“将public架构中的所有表添加到default复制集中”

SELECT pglogical.replication_set_add_all_tables('default', ARRAY['public']);

方法二:

将表添加到对应的复制集中;详细介绍可以查看前面文档。

pglogical.replication_set_add_table(set_name name, relation regclass, synchronize_data boolean, columns text [],row_filter text)

两种方法都可以;我们采用第二种方法。

lottu=# select pglogical.replication_set_add_table( set_name := 'default', relation := 'tbl_lottu01',synchronize_data := true); replication_set_add_table --------------------------- t (1 row)

我们查看复制集

lottu=# select * from pglogical.replication_set_table ; set_id | set_reloid | set_att_list | set_row_filter -----------+-------------+--------------+---------------- 290045701 | tbl_lottu01 | | (1 row)

同时,数据也同步到 subscriber 节点。因为在第二种方法有 同步 的操作。若使用第一种方法;还需要在subscriber 节点同步表的操作。

#重新同步一个表 pglogical.alter_subscription_resynchronize_table(subscription_name name, relation regclass) #将所有的表都同步 pglogical.alter_subscription_synchronize(subscription_name name, truncate bool)

4、查看subscriber 节点

查看表 tbl_lottu01 信息

lottu=# select * from pglogical.show_subscription_table('subscription1','tbl_lottu01'); nspname | relname | status ---------+-------------+-------------- public | tbl_lottu01 | synchronized (1 row) lottu=# select count(1) from tbl_lottu01; count ------- 10000 (1 row)

在复制集default中: update/delete/truncate 操作也是同步复制。不作演示

复制集INSERTUPDATEDELETETRUNCATE
default          
default_insert_only     ×   ×   ×  
四、复制特性扩展 4.1、延迟复制

pglogical.create_subscription(subscription_name name, provider_dsn text, replication_sets text[], synchronize_structure boolean, synchronize_data boolean, forward_origins text[], apply_delay interval)

参数:

subscription_name - 订阅的名称,必须是唯一的

provider_dsn - 提供者的连接字符串

replication_sets - 要订阅的复制集数组,这些必须已存在,默认为“{default,default_insert_only,ddl_sql}”

synchronize_structure - 指定是否将提供者与订阅者之间的结构同步,默认为false

synchronize_data - 指定是否将数据从提供者同步到订阅者,默认为true

forward_origins - 要转发的原始名称数组,当前只支持的值是空数组,意味着不转发任何不是源自提供者节点的更改,或“{all}”这意味着复制所有更改,无论它们的来源是什么,默认是全部}”

apply_delay - 延迟复制多少,默认为0秒

示例:数据表结构同步;且延迟复制1分钟

SELECT pglogical.create_subscription( subscription_name := 'subscription1', provider_dsn := 'host=192.168.1.221 port=5432 dbname=lottu', synchronize_structure := true, apply_delay := '00:01:00'::interval );

4.2、对源端进行 行/列 过滤

过滤机制需要 PostgreSQL 9.5 +

pglogical.replication_set_add_table(set_name name, relation regclass, synchronize_data boolean, columns text [],row_filter text)

参数:

set_name - 现有复制集的名称

relation - 要添加到集合中的表的名称或OID

synchronize_data - 如果为true,则表数据将在订阅给定复制集的所有订户上同步,默认为false

columns - 要复制的列的列表。通常,当应复制所有列时,这将设置为NULL,这是默认值

row_filter - 行过滤表达式,默认为NULL(无过滤),有关详细信息,请参阅(行过滤)。警告:在使用有效行筛选器同步数据时要小心。使用synchronize_data=true有效row_filter就像对表的一次性操作。使用修改后再次执行它将row_filter不会将数据同步到订户。订阅者可能需要pglogical.alter_subscription_resynchronize_table()来修复它。

**

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/d77f3980474f4ca9c39118dbf55906e5.html