논리적 복제
행 단위 복제, 물리적 복제 보다 유연하다.
Primary
- Standby의 접근을 허용 해주고, publication을 생성해줘야한다.
-- replica를 위한 role 생성
CREATE ROLE {REPLICA_USER} WITH REPLICATION LOGIN PASSWORD '{PASSWORD}';
-- replica를 위한 role에 권한 부여
GRANT USAGE ON SCHEMA public TO {REPLICA_USER}; -- schema에 대한 권한
GRANT SELECT ON ALL TABLES IN SCHEMA public TO {REPLICA_USER}; -- tables에 대한 권한
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO {REPLICA_USER}; -- 이후 권한 부여 규칙에 추가
-- publication 생성
CREATE PUBLICATION {PUB_NAME} FOR ALL TABLES;
// pg_hbg.conf
host {TARGET_DATABASE} {REPLICA_USER} {STANDBY_IP} scram-sha-256
// posgresql.conf
# 외부 접속 허용
listen_addresses = '*'
# 복제에 필요한 정보 수준
wal_level = logical
# 동시 접속 가능한 Standby 수
max_wal_senders = 10
Standby
- 미리 DDL을 복제 해서 Database를 생성 해놔야한다. (DDL은 복제 해주지 않는다.)
- Primary를 Target으로 Subscription을 생성한다.
CREATE SUBSCRIPTION {SUB_NAME}
CONNECTION 'host={DOMAIN} port=5432 user={REPLICA_USER} password={PASSWORD} dbname={TARGET_DATABASE}'
PUBLICATION {PUB_NAME};