| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
- PostgreSQL
- 오라클
- mariaDB
- 논리백업
- 논리복구
- pgBackRest
- SQLP
- rds for oracle
- 복제테이블변경
- 오블완
- 리눅스
- pg_basebackup
- 물리백업
- chateau la ribaud 2018 medoc cre bourgeios
- oracle
- SQLD
- 티스토리챌린지
- 물리복제
- dasp
- dap
- 논리복제
- 샤또 라 리보 메독 크뤼 브르주아
- 2026 ADsP 시험일정
- 물리복구
- ADP시험일정
- Cloudy Bay Sauvignon Blanc
- 2026 ADP 시험일정
- 델타복원
- Linux
- postgresql물리백업과 복구
- Today
- Total
IT study
[PostgreSQL] 논리 복제(1) - 단방향 복제 구성 본문

논리복제 : WAL 파일의 내용을 분석해 DML 쿼리를 생성하여 전달. Logical decoding
Pg 버전이 달라도 복제를 수행할 수 있는 장점이 있다.
이 특성을 활용하여 메이저 버전 업그레이드시에 활용 가능
서비스별로 DB분리된 환경에서 배치 업무를 위한 필요 테이블만 한곳에 모아 작업 가능
ㅇ논리 복제 구성 절차
- 발생(Publication) 서버의 파라미터 설정 변경
- Publication 생성
- Publication 전용 유저 생성
- 구독(Subscription) 서버에 스키마 및 테이블 생성
- Subscription 생성
0. 테스트 환경 구성
svcdb=# grant usage, create on schema svc to svc;
GRANT
svcdb=# set role svc;
SET
svcdb=> create table svc.t1 (c1 integer, c2 integer, constraint t1_pk primary key(c1));
CREATE TABLE
svcdb=> create table svc.t2 (c1 integer, c2 integer, constraint t2_pk primary key(c1));
CREATE TABLE
svcdb=> insert into svc.t1 select i,i from generate_series(1,10) i;
INSERT 0 10
svcdb=> insert into svc.t2 select i,i from generate_series(1,10) i;
INSERT 0 10
1. 발행 서버의 파라미터 설정 변경
Wal_level = logical
Max_wal_senders = 10
Max_replication_slots = 10
Logical_decoding_work_mem=64mb (클수록 좋긴하나, 물리 고려해서 가능한크게)
2. Publication 생성
슈퍼유저 권한 가진 postgres 유저로 수행
DB내 전체 테이블, 특정 스키마 내 전체 테이블, 특정 테이블만 선택하여 범위 지정 가능
특정 조건 만족하는 레코드만 발행도 가능 .
svcdb=# set role postgres;
SET
svcdb=# create publication pub_svc_tbl for table svc.t1, svc.t2;
CREATE PUBLICATION
#확인
svcdb=# select pubname from pg_publication;
pubname
-------------
pub_svc_tbl
(1 row)
#publication에 포함된 테이블 목록 조회
svcdb=# select * from pg_publication_tables;
pubname | schemaname | tablename | attnames | rowfilter
-------------+------------+-----------+----------+-----------
pub_svc_tbl | svc | t1 | {c1,c2} |
pub_svc_tbl | svc | t2 | {c1,c2} |
(2 rows)
3. Publication 전용 유저 생성
발행 서버에 publication 전담 전용 유저 생성
svcdb=# create user lglrep with password 'reppass' replication;
CREATE ROLE
svcdb=# grant svc_rs to lglrep;
GRANT ROLE
- 복제 작업 수행위해 replication 권한 부여, 해당 권한이 있어야 구독 요청시 walsender 프로세스 기동 가능
- 해당 유저가 publication 대상 테이블을 조회할 수 있도록 권한 부여
(스키마내 모든 테이블 조회 가능한 role 부여하거나 특정 테이블만 부여)
** 논리복제의 경우 pg_hba.conf 파일에 replication 항목을 추가할 필요는 없다. 논리 복제가 특정 DB접속해서 복제를 수행하는 방식이기 때문이다.
4. 구독(subscription) 서버에 스키마 및 테이블 생성
(이전 물리복제때 내용도 포함되어있음)
svcdb=# grant usage, create on schema svc to svc;
GRANT
svcdb=# set role svc;
SET
svcdb=> create table svc.t1 (c1 integer, c2 integer, constraint t1_pk primary key(c1));
CREATE TABLE
svcdb=> create table svc.t2 (c1 integer, c2 integer, constraint t2_pk primary key(c1));
CREATE TABLE
5. Subscription 생성
svcdb=# create subscription sub_svc_tbl connection 'host=172.17.0.2 port=5432 dbname = svcdb user=lglrep password=reppass' publication pub_svc_tbl;
NOTICE: created replication slot "sub_svc_tbl" on publisher
CREATE SUBSCRIPTION
svcdb=# select subname from pg_subscription;
subname
-------------
sub_svc_tbl
svcdb=# select count(1) from svc.t1;
count
-------
10
(1 row)
논리복제는 replication 슬롯 기반으로 동작하므로,
발행서버에서 pg_replication_slots 뷰를 조회하면논리복제용 슬롯 확인 가능하다.
svcdb=> select slot_name, slot_type from pg_replication_slots;
slot_name | slot_type
-------------+-----------
sub_svc_tbl | logical
(1 row)