环 境
pg_publication; 查看发布。发布本身是无状态的,复制槽是有状态的,所以没有pg_stat_publication。 pg_publication_tables 查看发布的表,简单明了。 pg_publication_rel 查看发布的表,都是id。 pg_stat_subscription 查看订阅状态,pid是worker进程的pid。 pg_subscription 查看订阅。 pg_subscription_rel 查看订阅表,没有pg_subscription_tables。另外该视图可以查看订阅下面各个表的同步情况,这是复制槽视图做不到的。
\dRp list replication publications
\dRs list replication subscriptions
发布端
listen_addresses = '*'
wal_level = logical ####修改postgres.conf,wal_level参数重启生效
max_replication_slots = 8 ###设置数据库复制槽的数量,值必须大于订阅的数量
max_wal_senders = 10 ###设置值必须大于max_replication_slots + 物理备库数
host pubdb rep 192.168.88.0/32 md5
createuser rep replication login connectionlimit8password'rep';
createdatabase pubdb;
GRANT ALL PRIVILEGESONDATABASE pubdb to rep;
\c pubdb --如果复制用户不是表的owner,应该授权grantselecton trep1 to replicate1
grantselecton trep1 to rep;
createtable trep1(a int primary key,b char(10));
insertinto trep1 values(1,'abc');
altertable trep1 owner to rep ;
\c pubdb rep
create publication pub fortable trep1;
select * from pg_publication;
pubdb=> select * from pg_publication;
oid | pubname | pubowner | puballtables | pubinsert | pubupdate | pubdelete | pubtruncate
-------+---------+----------+--------------+-----------+-----------+-----------+-------------
24674 | pub | 24662 | f | t | t | t | t
\dRp
pubdb=> \dRp
List of publications
Name | Owner | All tables | Inserts | Updates | Deletes | Truncates
------+-------+------------+---------+---------+---------+-----------
pub | rep | f | t | t | t | t
select * from pg_publication_tables;
pubdb=> select * from pg_publication_tables;
pubname | schemaname | tablename
---------+------------+-----------
pub | public | trep1
pubdb=> select * from pg_publication_rel;
oid | prpubid | prrelid
-------+---------+---------
24675| 24674 | 24669
订阅端
listen_addresses = '*'
wal_level = logical ####修改postgres.conf,wal_level参数重启生效
max_replication_slots = 8 ###设置数据库复制槽的数量,值必须大于订阅的数量
max_wal_senders = 10 ###设置值必须大于max_replication_slots + 物理备库数
host subdb rep 192.168.88.0/32 md5
createuser rep replication login connectionlimit8password'rep';
createdatabase subdb;
\c subdb
createtable trep1(a int primary key,b char(10));
altertable trep1 owner to rep ;
create subscription kingbase8lasprdl_kfs_logical_slot connection'host=192.168.88.190 port=54329 dbname=pubdb user=rep password=rep' publication pub;
select * from pg_stat_subscription;
subdb=# select * from pg_stat_subscription;
subid | subname | pid | relid | received_lsn | last_msg_send_time | last_msg_receipt_time | latest_end_lsn | latest_end_time
-------+-----------------------------------+-----+-------+--------------+--------------------+-----------------------+----------------+-----------------
16400| kingbase8lasprdl_kfs_logical_slot | | | | | | |
select * from pg_subscription;
subdb=# select * from pg_subscription;
oid | subdbid | subname | subowner | subenabled | subconninfo |
subslotname | subsynccommit | subpublications
-------+---------+-----------------------------------+----------+------------+-------------------------------------------------------------------+---------
--------------------------+---------------+-----------------
16400| 16385 | kingbase8lasprdl_kfs_logical_slot | 10 | t | host=192.168.88.190 port=54329 dbname=pubdb user=rep password=rep | kingbase
8lasprdl_kfs_logical_slot | off | {pub}
\dRs
subdb=# \dRs
List of subscriptions
Name | Owner | Enabled | Publication
-----------------------------------+--------+---------+-------------
kingbase8lasprdl_kfs_logical_slot | system | t | {pub}
select * from pg_subscription_rel ;
subdb=# select * from pg_subscription_rel ;
srsubid | srrelid | srsubstate | srsublsn
---------+---------+------------+----------
16400 | 16395| i |
select slot_name,plugin,slot_type,database,active,restart_lsn from pg_replication_slots where slot_name='kingbase8lasprdl_kfs_logical_slot';

本文作者:王鑫雨(上海新炬中北团队)
本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




