pglogical如何查询已加入replication_set的schema/表/数组列表?
pglogical查询复制集内对象的方法
pglogical内置系统视图可直接查询复制集关联的schema、表等对象,具体操作如下:
1. 查询所有已创建的复制集基础信息
执行以下SQL即可获得当前节点所有复制集的基础配置:
SELECT * FROM pglogical.replication_set;
返回结果包含复制集ID、所属节点ID、复制集名称、是否同步INSERT/UPDATE/DELETE/TRUNCATE操作等字段,示例返回如下:
set_id | set_nodeid | set_name | replicate_insert | replicate_update | replicate_delete | replicate_truncate ------------+------------+----------------------+------------------+------------------+------------------+-------------------- 1921995266 | 1338498914 | default | t | t | t | t 4027572585 | 133849914 | default_insert_only | t | f | f | t 3823354649 | 13384994914 | ddl_sql | t | f | f | f 1724847149 | 1338498914 | replication_set | t | t | t | t (4 rows)
2. 查询指定复制集包含的所有表及所属schema
通过关联pglogical.replication_set_table视图和PostgreSQL系统表,可直接查询复制集内的表和对应schema:
SELECT s.set_name AS replication_set_name, n.nspname AS schema_name, c.relname AS table_name, rst.set_reloid::regclass AS table_full_name FROM pglogical.replication_set s INNER JOIN pglogical.replication_set_table rst ON s.set_id = rst.set_id INNER JOIN pg_class c ON rst.set_reloid = c.oid INNER JOIN pg_namespace n ON c.relnamespace = n.oid -- 去掉下方WHERE条件可查询所有复制集的对象 WHERE s.set_name = '替换为你要查询的复制集名称';
3. 查询指定复制集覆盖的所有schema
如果你是通过pglogical.replication_set_add_all_tables批量添加了整个schema到复制集,可通过以下SQL去重得到该复制集覆盖的所有schema列表:
SELECT DISTINCT n.nspname AS replicated_schema FROM pglogical.replication_set s INNER JOIN pglogical.replication_set_table rst ON s.set_id = rst.set_id INNER JOIN pg_class c ON rst.set_reloid = c.oid INNER JOIN pg_namespace n ON c.relnamespace = n.oid WHERE s.set_name = '替换为你要查询的复制集名称';
注意:pglogical不会单独存储批量添加的schema列表,调用
replication_set_add_all_tables时会将调用时刻该schema下的所有表逐个添加到复制集表中,后续新增的表不会自动同步到复制集,除非再次调用该函数。
内容的提问来源于stack exchange,提问作者Gowthamakanthan Gopal
相关产品推荐
相关产品推荐

