PostgreSQL 19 개요
PostgreSQL 19는 2026년 9월 출시 예정이다. 기능 동결(Feature Freeze)은 4월 8일에 완료되었고, 5월에 첫 번째 베타가 나올 예정이다.
PG18이 비동기 I/O, UUIDv7, 가상 생성 컬럼 같은 굵직한 기능을 가져왔다면, PG19는 기존 기능의 실질적 개선과 성능 최적화에 집중하는 릴리즈다. 화려하진 않지만 실무에서 체감할 수 있는 변화가 많다.
이 글은 2026년 4월 기준으로 작성되었으며, 정식 출시 전까지 일부 내용이 변경될 수 있다.
쿼리 플래너 & 실행
GROUP BY ALL
SELECT department, role, COUNT(*)
FROM employees
GROUP BY ALL;
GROUP BY ALL을 쓰면 집계 함수가 아닌 SELECT 표현식을 자동으로 GROUP BY에 포함한다. 컬럼 5개를 일일이 나열할 필요가 없어졌다.
Eager Aggregation
대용량 테이블을 조인하기 전에 먼저 집계하는 최적화다. enable_eager_aggregate 파라미터로 제어한다.
-- 플래너가 자동으로 orders를 먼저 집계한 후 customers와 조인
SELECT c.name, SUM(o.amount)
FROM customers c JOIN orders o ON c.id = o.customer_id
GROUP BY c.name;
조인 대상 행 수가 줄어들기 때문에 대용량 분석 쿼리에서 성능이 크게 개선될 수 있다.
COUNT() 자동 최적화
COUNT(1), COUNT(not_null_col)을 자동으로 COUNT(*)로 변환한다. 습관적으로 COUNT(1) 쓰던 사람들에게 좋은 소식.
병렬 TID Range Scan
TID Range Scan이 병렬 실행을 지원한다. 대규모 테이블에서 특정 범위의 물리적 행을 빠르게 스캔할 수 있다.
Incremental Sort 확장
Append/MergeAppend 노드 내에서도 Incremental Sort가 가능해졌다. 파티션 테이블의 정렬 성능이 개선된다.
EXPLAIN ANALYZE 타이밍 오버헤드 감소
x86-64 CPU에서 RDTSC 명령어를 활용해 시간 측정 오버헤드를 약 38% 줄였다. 이 주제는 별도 포스트에서 상세히 다룬다.
윈도우 함수 개선
IGNORE NULLS / RESPECT NULLS
lag, lead, first_value, last_value, nth_value에서 NULL 처리 방식을 지정할 수 있다.
SELECT
ts,
value,
last_value(value) IGNORE NULLS OVER (ORDER BY ts) AS last_non_null
FROM sensor_data;
시계열 데이터에서 NULL 값을 건너뛰고 마지막 유효 값을 가져오는 패턴이 훨씬 간결해졌다. 이전에는 서브쿼리나 래터럴 조인이 필요했다.
파티셔닝
MERGE / SPLIT PARTITIONS
-- 파티션 병합
ALTER TABLE bookings MERGE PARTITIONS (p_2024_q1, p_2024_q2) INTO p_2024_h1;
-- 파티션 분할
ALTER TABLE bookings SPLIT PARTITION p_2024 INTO
(PARTITION p_2024_h1 FOR VALUES FROM ('2024-01-01') TO ('2024-07-01'),
PARTITION p_2024_h2 FOR VALUES FROM ('2024-07-01') TO ('2025-01-01'));
파티션을 병합하거나 분할하는 DDL이 추가되었다. 기존에는 새 파티션을 만들고 데이터를 이동한 뒤 기존 파티션을 삭제해야 했다.
COPY TO with Partitioned Tables
파티션 테이블에서 직접 COPY TO가 가능해졌다. 이전에는 각 파티션을 개별적으로 복사해야 했다.
논리 복제 (Logical Replication)
WAL 레벨 동적 조정
서버 재시작 없이 WAL 레벨을 변경할 수 있다. effective_wal_level 읽기 전용 파라미터로 현재 상태를 확인한다.
이전에는 wal_level = logical 설정 변경 후 반드시 재시작이 필요했다. 운영 중인 시스템에서 논리 복제를 활성화할 때 다운타임을 줄일 수 있다.
시퀀스 복제
논리 복제에서 시퀀스 값을 동기화할 수 있다.
ALTER SUBSCRIPTION my_sub REFRESH SEQUENCES;
WAIT FOR LSN
레플리카가 특정 LSN까지 동기화될 때까지 대기하는 메커니즘이다. 읽기 일관성이 필요한 경우에 유용하다.
동기화 모니터링
pg_replication_slots에 slotsync_skip_reason 컬럼이 추가되어 슬롯 동기화 지연 원인을 파악할 수 있다.
성능 최적화
jsonb_agg 성능 향상
jsonb_agg 함수의 성능이 50% 이상 개선되었다. JSON 집계가 많은 API 백엔드에 좋은 소식.
LISTEN/NOTIFY 최적화
채널별 해시 테이블 기반으로 처리 방식이 변경되어, 많은 채널을 사용하는 환경에서 성능이 개선된다.
ICU 문자 변환 최적화
UTF-8 데이터베이스에서 ICU 문자 변환 함수의 성능이 향상되었다.
Buffer Cache 알고리즘 변경
Free buffer list를 Clock-sweep 알고리즘으로 교체했다.
Temporary Table 트렁케이션 고속화
임시 테이블 truncation 처리가 빨라졌다.
모니터링 & 관찰성
pg_stat_statements 확장
- Generic/Custom 플랜별 호출 횟수 추적
FETCH명령어 정규화IN절 파라미터 리스트 정규화
VACUUM / ANALYZE 진행 상황
mode,started_by컬럼 추가로 수동/자동 실행 구분 가능VACUUM VERBOSE에서 메모리 사용량 표시vacuumdb --dry-run옵션 추가log_autoanalyze_min_duration신규 파라미터로 ANALYZE 로깅 분리
pg_buffercache 확장
pg_buffercache_os_pages로 OS 페이지 분포를 확인할 수 있다.
WAL 모니터링
wal_fpi_bytes로 Full Page Image 바이트를 추적한다.
멀티트랜잭션 통계
pg_get_multixact_stats() 함수로 멀티트랜잭션 사용 현황을 확인할 수 있다.
SQL & 함수
random() 날짜/시간 생성
SELECT random('2024-01-01'::date, '2024-12-31'::date);
지정 범위 내 랜덤 날짜/시간을 생성할 수 있다. 테스트 데이터 생성이 간편해졌다.
base64url 인코딩
encode/decode 함수에서 URL-safe한 base64url 포맷을 지원한다.
error_on_null()
NULL 값 검증 함수가 추가되었다. NULL이 들어오면 에러를 발생시킨다.
SRF(Set-Returning Function) 인라인
Set-returning 함수의 인라인 최적화가 지원된다.
관리 & 도구
regdatabase 타입
데이터베이스 이름과 OID를 상호 변환하는 새 객체 식별자 타입이다.
CHECKPOINT 개선
FLUSH_UNLOGGED, MODE 파라미터가 추가되었다.
pg_upgrade 대용량 객체 최적화
대용량 객체(Large Object) 마이그레이션이 빨라졌다.
psql 개선
%S프롬프트 옵션으로 검색 경로 표시- boolean 값 표시 커스터마이징 (
\pset display_true)
pgbench
--continue-on-error 옵션으로 에러 발생 시에도 벤치마크를 계속 진행할 수 있다.
호환성 주의
standard_conforming_strings 비활성화 불가
이제 standard_conforming_strings를 off로 설정할 수 없다. 비표준 문자열 리터럴(\' 등)은 에러를 발생시킨다. escape_string_warning 파라미터도 제거되었다.
기존에 E'...' 없이 역슬래시 이스케이프를 쓰던 레거시 코드가 있다면 확인이 필요하다.
log_lock_waits 기본값 변경
log_lock_waits가 기본적으로 활성화된다. 잠금 대기 로그가 자동으로 남는다.
마무리
PG19는 눈에 띄는 신기능보다는 기존 기능의 완성도를 높이는 릴리즈다.
개인적으로 주목하는 것들:
- GROUP BY ALL — 매일 쓰게 될 편의 기능
- Eager Aggregation — 분석 쿼리 성능에 직접적 영향
- WAL 레벨 동적 조정 — 운영 중 논리 복제 활성화가 편해짐
- EXPLAIN ANALYZE RDTSC — 다음 글에서 상세히 다룬다
- IGNORE NULLS — 시계열 처리가 깔끔해짐
2026년 9월 정식 출시를 기대하며, 5월 베타부터 미리 테스트해볼 수 있다.