Postgres 19의 새로운 점: 베타 릴리스 심층 분석
3 days ago
8
- 대규모 프로덕션 데이터베이스를 위한 REPACK CONCURRENTLY 가 코어에 내장되고, SQL 속성 그래프 쿼리·논리적 복제·VACUUM·성능 등 전 영역에 걸친 폭넓은 개선이 담긴 베타 릴리스
- 파티션 병합·분할 지원과 시퀀스 값 동기화로 운영 중 설계 변경과 데이터 이동이 한층 수월해짐
- 오토배큠에 병렬 워커와 우선순위 점수 체계가 도입되어 유지보수 작업의 처리량과 가시성 향상
- SQL/PGQ 도입으로 관계형 모델을 버리지 않고 기존 데이터를 그래프 형태로 조회 가능
- 단일 헤드라인 기능이 아닌 폭넓음(breadth) 이 핵심으로, 애플리케이션·운영·성능·확장성 전반에서 동시에 발전
REPACK 기본 내장
- 테이블 블로트 회수, 테이블 재작성, 데이터 재구성 시 VACUUM FULL이나 CLUSTER가 동반하는 락을 피하려는 상황이 오랜 운영 환경에서 반복적으로 발생
- 이 문제를 해결하는 확장 생태계가 존재했고, 대표적으로 pg_repack 이 그 공백을 채워옴
- Postgres 19는 REPACK 명령을 코어로 도입하며, REPACK CONCURRENTLY 지원 포함
- 평균적인 릴리스 노트 독자가 예상하는 것보다 프로덕션 사용자가 더 주목할 기능으로 기대됨
파티셔닝의 실용성 강화
- Postgres 19는 파티션 병합·분할 지원을 추가
- 파티셔닝 전략은 불완전한 정보로 선택되며, 워크로드·보존 기간·데이터 증가 속도가 바뀌면 일부 파티션이 비대해지거나 지나치게 작아지는 문제 발생
- 분할·병합 가능으로 처음부터 전부 재구성하지 않고 시간에 따라 설계를 진화시킬 여지 확보
- Q1·Q2 파티션을 단일 파티션으로 병합: ALTER TABLE customer_orders MERGE PARTITIONS (orders_2026_q1, orders_2026_q2) INTO orders_2026_h1;
- Q3 파티션을 월 단위로 분할하는 SPLIT PARTITION 예시 제공
논리적 복제의 성숙
- 논리적 복제는 마이그레이션, 업그레이드, 리포팅 시스템, 데이터 이동, 선택적 복제, 고가용성·운영 워크플로에 유용
- 가장 큰 개선은 시퀀스 값 동기화로, 구독자가 발행자와 더 잘 일치
- 시퀀스 상태 없이 복제 시 데이터는 이동하나 다음 생성 ID가 어긋나는 cutover 후 문제 발생
- 발행에 ALL SEQUENCES 지원, 시퀀스 동기화 오류 보고, 시퀀스 관련 구독 갱신 동작 개선 추가
- 발행 시 모든 테이블을 게시하면서 일부를 제외하는 EXCEPT 절 사용 가능
- wal_level = replica 가 필요 시 논리적 복제를 자동 활성화, 실제 동작을 보고하는 새 effective_wal_level 추가로 설정 실수 감소와 가시성 향상
더 똑똑하고 잘 보이는 오토배큠
- 오토배큠이 병렬 배큠 워커를 사용할 수 있으며, 전역 및 테이블 단위로 제어 가능
- 전역 설정 예시: ALTER SYSTEM SET autovacuum_max_parallel_workers = 4;
- 테이블이 배큠되는 순서를 제어하는 새 점수 체계 도입으로 어떤 테이블이 가장 시급한지 우선순위 판단 개선
- 테이블별 가중치 조정 예시: insert 기반 배큠 긴급도 3.0, 일반 update/delete 배큠 긴급도 0.5
- 새 pg_stat_autovacuum_scores 뷰로 의사결정 과정 가시성 제공
- 배큠·분석 진행 뷰의 상세 정보, VACUUM VERBOSE와 오토배큠 로그의 메모리 사용량·병렬성, 별도 log_autoanalyze_min_duration 추가로 유지보수 관찰성 강화
SQL 속성 그래프 쿼리 도입
- SQL/PGQ(SQL property graph queries) 추가
- 정점·간선 모델이 유용한 워크로드로 사기 탐지, 추천, 네트워크 분석, 권한 그래프, 공급망, 조직도 등 명시
- 속성 그래프 정의 예시: CREATE PROPERTY GRAPH store_graph로 VERTEX TABLES와 EDGE TABLES 지정
- 관계형 모델을 버리지 않고, 이미 보유한 데이터를 조회하는 또 다른 방법을 추가하는 방식
- JSONB, 전문 검색, 확장이 기존 아키텍처 변경을 강요하지 않았던 것과 동일한 흐름
- 개발자 관점에서 별도 데이터스토어, 동기화 경로, 운영 표면적, 새벽 2시 디버깅 대상을 늘리지 않고 그래프형 쿼리 사용 가능
더 유용해진 COPY
- COPY FROM 이 여러 헤더 라인 건너뛰기 지원
- 상단에 추가 메타데이터 라인이 붙은 벤더·내부 도구·export CSV 처리에 유용
- COPY FROM 에 ON_ERROR SET_NULL 추가로 잘못된 입력값을 null로 설정, "전체 로드 실패"와 "사전 정제" 사이의 선택지 제공
- price 컬럼에 'N/A'·'MISSING'이 섞인 파일 로드 예시 제공
- COPY TO 가 단일 JSON 배열을 포함한 JSON 형식 출력 가능, 파티션 테이블도 직접 출력 가능(이전에는 COPY (SELECT ...) 필요)
- 테이블을 유효한 JSON 배열로 내보내는 예시: WITH (FORMAT JSON, ARRAY true)
SQL 편의성 개선
- GROUP BY ALL 로 비집계·비윈도우 대상 목록 표현식을 자동 그룹화, 탐색적 SQL·리포팅 쿼리를 더 깔끔하게 작성
- 윈도우 함수에 IGNORE NULLS·RESPECT NULLS 지원이 lead, lag, first_value, last_value, nth_value에 추가
- INSERT ... ON CONFLICT DO SELECT ... RETURNING 추가로 upsert에서 충돌 행을 더 직접 반환
- UPDATE·DELETE FOR PORTION OF 추가로 시간(temporal) 관련 작업 지원 지속, 확장된 RANDOM() 시간 함수 포함
전반에 걸친 성능 개선
- 플래너와 실행기에 anti-join, semi-join, constant folding, append 경로의 incremental sort, 조인 전 집계 처리, 조인 선택도 계산, 함수 통계 등 다수 개선
- Postgres가 흔한 쿼리의 형태를 더 잘 인식하고 불필요한 작업을 줄이는 방향으로 발전
- 일부 집계 처리가 조인 전에 수행되어 처리 행 수 감소
- 더 많은 NOT IN·LEFT JOIN 사례가 효율적 anti-join으로 전환
- Memoize의 EXPLAIN 가시성 향상, radix sort로 정렬 성능 개선, 외래 키 제약 검사 속도 향상, COPY FROM 텍스트·CSV 입력에 SIMD 명령 활용
- 다수의 경우 애플리케이션 코드 변경 없이 업그레이드만으로 더 나은 동작 가능
Postgres 19가 중요한 이유
- 단일 기능이 아닌 폭넓음(breadth) 이 두드러짐
- 애플리케이션 개발자용: 그래프 쿼리, 향상된 SQL 구문, 윈도우 함수 개선, 더 나은 upsert 동작
- 운영자용: REPACK CONCURRENTLY, 개선된 오토배큠, 향상된 모니터링, 온라인 체크섬 변경, 복제 가시성 확대
- 성능 중시 사용자용: 플래너 개선, SIMD 개선, 비동기 I/O 가시성, 빠른 외래 키 검사, 개선된 정렬
- Postgres 위에서 구축하는 사용자용: 새 훅, 플래너 어드바이스 모듈, 확장 개선, FDW 통계 검색, 확장 생태계 투자 지속
- 단일 워크로드·페르소나가 아닌 애플리케이션·운영·분석·확장 데이터베이스이자 플랫폼으로서 동시에 발전
- 아직 GA가 아니므로 지금이 테스트 시점 — 애플리케이션 실행, 마이그레이션 테스트, 확장 점검, 주요 쿼리 플랜 확인, 논리적 복제·유지보수 워크플로 점검 필요
-
Homepage
-
개발자
- Postgres 19의 새로운 점: 베타 릴리스 심층 분석