2025/03 15

drop 시점을 모르는 상태에서의 특정 테이블 복구

상황 요약상황: 초기 데이터 적재 후 풀 백업 완료 → 작업자 실수로 테이블 DROP → DROP 시각 모름 → 무중단 복구 필요.목표: DB 정지 없이 DROP 직전 시점으로 테이블 복구.제약: sequence 복구도 따로 필요함초기 데이터 적재CREATE TABLE test_table ( id SERIAL PRIMARY KEY, name TEXT);INSERT INTO test_table (name) VALUES ('Alice'), ('Bob'), ('Charlie');SELECT * FROM test_table;full backup 완료 ( 테이블 별로 backup )pg_dump -Fc -f full_backup.dump -d mydbseqeunce 백업 확인postgres@lkmpg:..

pgbackrest를 사용한 PostgreSQL 15 백업 및 복구 Incrementalbackup

증분백업 테스트이번엔 full + diff 를 가지고 증분 백업을 진행한다.데이터 추가증분 데이터 확인 postgres@lkmpg:~$ sudo -u postgres psql -d testdb -c "INSERT INTO test_table (data) VALUES ('Incremental Backup Test');"INSERT 0 1증분백업postgres@lkmpg:~$ sudo -u postgres pgbackrest --stanza=demo --type=incr backup2025-03-15 13:00:22.819 P00 INFO: backup command begin 2.54.2: --exec-id=1581-421f3c55 --log-level-console=info --pg1-path=/va..

pgbackrest를 사용한 PostgreSQL 15 백업 및 복구 Differentialbackup

차등백업 테스트차등백업을 위해서 데이터 insertpostgres@lkmpg:~$ sudo -u postgres psql -d testdb -c "INSERT INTO test_table (data) VALUES ('Differential Backup Test');"INSERT 0 1 차등백업 수행postgres@lkmpg:~$ sudo -u postgres pgbackrest --stanza=demo --type=diff backup2025-03-15 12:54:08.439 P00 INFO: backup command begin 2.54.2: --exec-id=1469-c095f788 --log-level-console=info --pg1-path=/var/lib/postgresql/15/main ..

pgbackrest를 사용한 PostgreSQL 15 백업 및 복구 fullbackup

pgbackrest 설치 설정은 다른게시글 참조백업 확인현재는 backup 본이 없는 상태postgres@lkmpg:/var/lib/pgbackrest/archive/demo$ sudo -u postgres pgbackrest info stanza: demo status: error (no valid backups) cipher: none db (current) wal archive min/max (15): 000000050000000000000010/000000050000000000000011테스트를 위해 데이터 생성postgres@lkmpg:/var/lib/pgbackrest/archive/demo$ sudo -u postgres psql -c "CREATE DATABASE testdb;"sudo -..

postgresql에서 외부 데이터 조회하는 방법

목적 : postgresql에서 oracle 또는 mysql 데이터를 조회한다. 방안 : oracle_fdw, mysql_fdw 활용주요 기능데이터 조회 및 수정SQL 쿼리의 통합 실행데이터 통합설치방법oracle_fdwgit clone https://github.com/laurenz/oracle_fdw.gitcd oracle_fdwmakesudo make installCREATE EXTENSION oracle_fdw;CREATE SERVER oracle_serverFOREIGN DATA WRAPPER oracle_fdwOPTIONS (dbserver '//oracle_host:1521/service_name');CREATE USER MAPPING FOR postgresSERVER oracle_serve..

Postgresql/admin 2025.03.13

sql plan 변경 모니터링

목적: 기존의 sql의 실행계획이 변경되었는지 모니터링하여 장애 예방한다.방안: extension 중 pg_store_plans를 활용 주기적으로 변경된 plan이 있는지 확인한다.plan 변경 감지 쿼리WITH plan_changes AS ( SELECT p.queryid, s.query, p.plan AS new_plan, LAG(p.plan) OVER (PARTITION BY p.queryid ORDER BY p.calls) AS old_plan FROM pg_store_plans p JOIN pg_stat_statements s ON p.queryid = s.queryid)SELECT queryid, ..

Postgresql/admin 2025.03.13

유용한 extension 정리

정리 📌pg_stat_statements SQL 쿼리 성능 분석 (실행 횟수, 평균 실행 시간 등)pg_store_plans SQL 실행 계획 저장 및 분석pg_stat_kcache 쿼리별 CPU, 메모리, 디스크 I/O 사용량 확인pg_buffercache 캐시에서 어떤 테이블이 자주 사용되는지 확인pg_prewarm PostgreSQL 재시작 후 중요한 데이터를 미리 로드pg_cron 자동화된 데이터 정리 및 백업 스케줄링pg_bloat_check 테이블과 인덱스의 블로트(불필요한 공간) 확인pg_repack 다운타임 없이 테이블 최적화auto_explain 실행 시간이 긴 쿼리의 실행 계획 자동 로깅pg_stat_io PostgreSQL 16+에서 디스크 I/O 분석운영 환경에서 PostgreSQ..

Postgresql/설치 2025.03.13

WAL-G를 사용한 PostgreSQL 15 백업 및 복구 테스트 시나리오2

아래 타임라인으로 PITR 시나리오 시간 축 (2025-03-10 기준)--------------------------------------------------------->T0 T1 T2 T3 T4 T5 T6[상태]T0: 초기 데이터 (Alice, Bob) └─── 백업 1 (base_000000010000000000000001)T1: 트랜잭션 1 (Charlie 추가, Alice 삭제 → Bob, Charlie)T2: 첫 번째 복구 (T0 시점으로 복구 → Alice, Bob)T3: 트랜잭션 2 (David 추가, Bob → Bobby → Alice, Bobby, David) └─── 백업 2 (base_00000001000..