今天搭建 Postgresql 逻辑复制遇到如下问题:
1.创建发布和订阅之后,


问题1:
发布端创建事务槽:
SELECT pg_create_logical_replication_slot('sub_ukcore_slot', 'pgoutput');
调整订阅端的创建语句
CREATE SUBSCRIPTION sub_ukcore CONNECTION 'host=10.30.***.*** port=5432 dbname=ukprod user=repuser password=*****************'
PUBLICATION pub_ukcore WITH (copy_data = false, create_slot=false, enabled=false, slot_name=sub_ukcore_slot);
ALTER SUBSCRIPTION sub_ukcore ENABLE;
问题2:
备机全异常,导致主机夯死,检查集群状态,重启备机节点程序,恢复备机。问题解决。
完整的脚本如下:
/* ********************************* 发布端 ********************************* */
--订阅端修改参数,所有主备都要执行更改
wal_level>=logical
alter system set max_replication_slots=160;
alter system set max_wal_senders=160;
--创建复制用户he授权
create user repuser replication login connection limit 8 password '*****************';
grant select on all tables in schema ukcore to repuser;
grant usage on schema public to repuser;
grant connect on database ukprod to repuser;
--创建发布
create publication pub_ukcore for tables in schema ukcore;
--创建事务槽
SELECT pg_create_logical_replication_slot('sub_ukcore_slot', 'pgoutput');
/* ********************************* 订阅端 ********************************* */
--订阅端修改参数,所有主备都要执行更改
alter system set max_replication_slots=160;
alter system set max_logical_replication_workers=32;
alter system set max_worker_processes=64;
--创建用户并授权
create user repuser replication login connection limit 8 password '*****************';
grant all on all tables in schema ukcore to repuser;
grant usage on schema public to repuser;
grant connect on database ukprod to repuser;
CREATE SUBSCRIPTION sub_ukcore CONNECTION 'host=10.30.***.*** port=5432 dbname=ukprod user=repuser password=*****************'
PUBLICATION pub_ukcore WITH (copy_data = false, create_slot=false, enabled=false, slot_name=sub_ukcore_slot);
ALTER SUBSCRIPTION sub_ukcore ENABLE;
/* ********************************* 常用视图 ********************************* */
select * from pg_replication_slots;
select * from pg_stat_replication;
select * from pg_publication ;
select * from pg_publication_rel ;
select * from pg_subscription ;
select * from pg_subscription_rel ;
/* ********************************* 注意 ********************************* */
1. DDL语句不同步,发布端执行DDL语句后,订阅端也需要手工执行DDL语句,两端执行完之后如不能继续同步增量,可执行如下语句
alter subscription sub_ukcore refresh publication;
2. synchronous_standby_names 参数
show synchronous_standby_names ;
synchronous_standby_names
------------------------------------------------------------
ANY 1 (pgautofailover_standby_1, pgautofailover_standby_3)
(1 row)
如果该参数如此配置,则俩个物理备库都需要正常,如果两个备都异常,则主库将会夯
3.所同步复制的表需要有主键




