配置逻辑复制参数
[pgsql@orcl pgdata]$ cat postgresql.conf |grep wal_level
wal_level = logical # minimal, replica, or logical
参数修改后需要重启实例生效
[pgsql@orcl:/postgresql/pgdata]$pg_ctl restart
从库目前信息
SELECT nspname || '.' || relname AS object_name,
CASE
WHEN relkind = 'r' THEN 'table'
WHEN relkind = 'v' THEN 'view'
WHEN relkind = 'm' THEN 'materialized view'
WHEN relkind = 'i' THEN 'index'
WHEN relkind = 'S' THEN 'sequence'
WHEN relkind = 's' THEN 'special'
ELSE 'unknown'
END AS object_type
FROM pg_class
LEFT JOIN pg_namespace ON pg_namespace.oid = pg_class.relnamespace
WHERE nspname NOT LIKE 'pg_%' AND nspname != 'information_schema';
object_name | object_type
--------------------+-------------
public.cs01 | table
public.cs01_id_seq | sequence
public.cs02 | table
public.cs02_id_seq | sequence
public.cs01_pkey | index
public.cs02_pkey | index
public.cs01_id | index
(7 rows)
备库订阅:
在从库实例上选择用来订阅主实例的数据库,创建逻辑订阅
--修改 postgres 用户密码: ALTER USER postgres WITH PASSWORD 'postgres';
CREATE SUBSCRIPTION s
CONNECTION 'host=192.168.31.211 port=5432 user=postgres dbname=postgres
connect_timeout=10 password=postgres'
PUBLICATION p
WITH
(connect=true,enabled=true,copy_data=true,create_slot=true,synchronous_commit='r
emote_apply');
## s 为订阅设置的名称'host=192.168.31.21 port=5432 user=postgres dbname=postgres
connect_timeout=10 password=postgres' 为主库的连接信息
ALTER SUBSCRIPTION s REFRESH PUBLICATION WITH (copy_data = true);
查询表同步情况,内容无误
##如果需要配置同步复制的话需要修改参数 postgresql.conf:
synchronous_commit=remote_apply ##表示流复制主库提交事务时 ,需等待备库完成相应部分
apply 才向客户端返回成功
synchronous_standby_names='s' ##这里的‘s’是上面配置的订阅名字
插入数据测试无误:
postgres=# insert into cs01 values(3,'cs',40);
评论