동일 서버 내에 생성된 DB간 테이블 복제 방법 / 방식은 다르지만 CDC처럼 동작하는 효과를 얻을 수 있음..
예시 ) TEST DB의 TEST테이블을 TEST1 DB의 TEST테이블로 데이터를 복제하고 복제된 데이터는 TEST DB의 TEST테이블에서 삭제가 필요했음.
1) EXTENSION설치 (TEST DB에서 실행)
CREATE EXTENSION dblink;
CREATE EXTENSION postgres_fdw;
2) TEST DB에서 생성
CREATE SERVER tropdb_server
FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (host 'HOST', port '5432', dbname 'test1'); --> 복제할 DB정보
CREATE USER MAPPING FOR CURRENT_USER
SERVER tropdb_server
OPTIONS (user 'USERID', password 'PW'); --> 복제할 DB의 접속 ID/PW 정보
CREATE FOREIGN TABLE 스키마.test_fdw
(
id integer,
data text
)
SERVER tropdb_server
OPTIONS (schema_name '스키마명', table_name '테이블명');
3) 복제한 데이터 삭제를 위한 트리거 생성
CREATE OR REPLACE FUNCTION replicate_and_delete()
RETURNS TRIGGER AS $$
BEGIN
INSERT INTO testsch.test_fdw (id, data)
VALUES (NEW.id, NEW.data);
DELETE FROM testsch.test WHERE id = NEW.id;
RETURN NULL;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER after_insert_trigger
AFTER INSERT ON testsch.test
FOR EACH ROW
EXECUTE FUNCTION replicate_and_delete();
4) TEST DB의 TEST테이블에 데이터 INSERT
INSERT INTO testsch.test (id, data) VALUES (1, 'Test data 1');
INSERT INTO testsch.test (id, data) VALUES (2, 'Test data 2');
INSERT INTO testsch.test (id, data) VALUES (3, 'Test data 3');
5) TEST1 DB의 TEST테에블 확인 (SELECT * FROM TEST)
6) TEST DB의 TEST테이블에 데이터 삭제되었는지 확인(SELECT * FROM TEST)
'DBA > Postgresql' 카테고리의 다른 글
| 테이블 정의서 추출 (0) | 2024.08.07 |
|---|---|
| orafce 설치 및 적용 (0) | 2024.07.29 |
| pg_stat_statements 활용(통계 정보) (0) | 2024.07.26 |
| PostgreSQL 에러 코드 (3) | 2024.07.24 |
| PostgreSQL의 VACUUM 및 MVCC 이해 (0) | 2024.06.25 |