PostgreSQL 18에서 수억 행을 적재하고 갱신하고 삭제하는 작업을 안전하게 수행하는 방법을 정리합니다. COPY의 옵션과 기본값, 문서가 권장하는 초기 적재 절차, ON_ERROR로 불량 행을 견디는 방법, 대량 UPDATE와 DELETE를 청크로 나누는 설계, 삭제 이후의 죽은 행 처리와 VACUUM FULL을 피해야 하는 이유, 그리고 재개 가능한 백필 작업을 만드는 방법까지 다룹니다.
PostgreSQL 18과 PgBouncer를 기준으로 커넥션 풀을 계약의 관점에서 정리합니다. 세션·트랜잭션·문장 풀링 세 가지 모드가 각각 무엇을 보장하고 무엇을 포기하는지, 트랜잭션 풀링에서 준비된 문장과 SET, LISTEN/NOTIFY, 어드바이저리 락이 왜 깨지는지, 애플리케이션 풀과 PgBouncer와 max_connections 사이의 삼중 예산을 어떻게 배분하는지, 그리고 타임아웃을 어느 계층에 걸어야 하는지를 문서의 기본값과 함께 다룹니다.
PostgreSQL 18을 기준으로 성능 튜닝을 파라미터 목록이 아니라 진단 순서로 정리합니다. pg_stat_statements로 워크로드를 프로파일링하고, 대기 이벤트로 병목의 성격을 가르고, 캐시와 I/O 지표를 읽고, 그다음에야 메모리 예산과 체크포인트와 autovacuum을 조정하는 순서입니다. PostgreSQL 18에서 바뀐 기본값들과 변경 전후를 비교하는 방법까지 다룹니다.
PostgreSQL 18을 기준으로 인덱스를 하나의 운영 자산으로 다룹니다. 어떤 컬럼을 어떤 순서로 넣을지 정하는 설계, 여섯 가지 인덱스 방식 중 하나를 고르는 판단, CONCURRENTLY로 안전하게 만드는 절차와 실패 복구, 정말 쓰이는지 확인하는 검증, 부풀어 오른 인덱스를 다시 만드는 운영, 그리고 되돌릴 수 있게 폐기하는 방법까지 수명 주기 순서로 정리합니다.