logical-replication

논리적 복제

행 단위 복제, 물리적 복제 보다 유연하다.

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};