PostgreSQL 19 새 기능 총정리
2026-09-24 PostgreSQL 19 Beta 4 공지에서 이 글이 소개한 기능 일부가 revert됐습니다. 파티션 MERGE/SPLIT, SQL/PGQ가 여기에 해당합니다. 공지에는 이 밖에 online data checksums, FOR PORTION OF, pg_get_role_ddl() 등 DDL 함수의 revert와 제거도 있습니다. GROUP BY ALL은 그보다 앞서 Beta 3 이전에 revert됐습니다. 공지 기준 GA 예상 시점도 10월로 바뀌었습니다. 경위와 컨테이너 비교 결과는 PG19 Beta 4 기능 철회에 정리했습니다.
PostgreSQL 19 개요
PostgreSQL 19는 2026년 9월 출시 예정이에요. 기능 동결(Feature Freeze)은 4월 8일에 완료되었고, 5월에 첫 번째 베타가 나올 예정이에요.
PostgreSQL 18이 비동기 I/O, UUIDv7, 가상 생성 컬럼 같은 굵직한 기능을 가져왔다면, PostgreSQL 19는 기존 기능의 실질적 개선과 성능 최적화에 집중하는 릴리즈입니다. 화려하진 않지만 실무에서 체감할 수 있는 변화가 많습니다.
이 글은 2026년 4월 기준으로 작성되었으며, 정식 출시 전까지 일부 내용이 변경될 수 있습니다.
업데이트: 첫 베타(Beta 1)는 2026-06-04에 나왔습니다. 아래 GROUP BY ALL은 Beta 3에서 revert되어 최종 릴리스에서 빠졌습니다.
쿼리 플래너 & 실행
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 옵션으로 에러 발생 시에도 벤치마크를 계속 진행합니다.
그래프 쿼리 (SQL/PGQ)
PostgreSQL 19는 SQL:2023 Part 16(SQL/PGQ) 을 코어에 들였습니다. 관계형 테이블 위에 프로퍼티 그래프 뷰를 얹고, GRAPH_TABLE과 MATCH 구문으로 그래프 패턴 매칭을 표준 SQL 안에서 풉니다. 별도 그래프 DB나 확장 없이 PostgreSQL만으로 일부 그래프 워크로드를 받아낼 수 있게 되었습니다.
첫 구현은 고정 깊이 패턴까지입니다. 가변 길이 경로는 다음 릴리스의 1차 후보입니다. 이 주제는 분량이 커서 별도 포스트에서 상세히 다룹니다.
호환성 주의
standard_conforming_strings 비활성화 불가
이제 standard_conforming_strings를 off로 설정할 수 없습니다. 비표준 문자열 리터럴(\' 등)은 에러를 발생시킵니다. escape_string_warning 파라미터도 제거되었습니다.
기존에 E'...' 없이 역슬래시 이스케이프를 쓰던 레거시 코드가 있다면 확인이 필요합니다.
log_lock_waits 기본값 변경
log_lock_waits가 기본적으로 활성화됩니다. 잠금 대기 로그가 자동으로 남습니다.
마무리
PostgreSQL 19는 눈에 띄는 신기능보다는 기존 기능의 완성도를 높이는 릴리즈입니다.
제가 개인적으로 주목하는 기능은 분석 쿼리 성능에 직접 영향을 주는 Eager Aggregation과 운영 중 논리 복제 활성화를 편하게 해주는 WAL 레벨 동적 조정이에요. IGNORE NULLS는 시계열 처리를 깔끔하게 해주고, 표준 그래프 쿼리를 코어에 들인 SQL/PGQ도 눈에 들어와요. EXPLAIN ANALYZE RDTSC는 다음 글에서, SQL/PGQ는 후속편에서 상세히 다룹니다.
2026년 9월 정식 출시가 기대되고, 5월 베타부터 미리 테스트해볼 수 있어요.