본문 바로가기
RDBMS/PostgreSQL

[PostgreSQL] 16.0 Release note 주요 내용 정리

by 연습장이 2024. 4. 8.
728x90
반응형

목적

  최신 버전 업그레이드 전, 영향도 평가하기 위함

 

개요

  • full 및 내부(internal) right 해시 조인의 병렬 허용
  • 스탠바이 서버에서의 논리적 복제를 허용함
  • 논리적 복제 구독자가 대규모 트랜잭션을 병렬로 적용을 허용함
  • 새로운 pg_stat_io 뷰를 사용한 I/O 통계 모니터링을 허용함
  • SQL/JSON 생성자(constructors) 및 식별함수(identity fuctions)를 추가함
  • 배큠 freezing의 성능 개선
  • pg_hba.conf 및 pg_ident.conf에서 사용자 및 DB 이름의 정규 표현식 일치 지원을 추가함

 

해당 버전으로의 이관 가이드

  • pg_dumpall 또는 pg_upgrade 사용을 통한 dump/restore 방식이 요구됨

 

이전 버전과의 비호환 내용

  • PL/pgSQL 바인드 커서 변수에 대한 할당 규칙을 변경함. 이전에는 해당 변수의 문자열 값이 커서 할당 시 변수 이름과 일치하도록 설정되었지만 이제는 OPEN 중에 할당되며 변수 이름과 일치하지않음. 이전 동작을 복원하려면 OPEN 전에 원하는 포털 이름을 커서 변수에 할당할 것
  • NULLS NOT DISTINCT 인덱스를 기본키에 대해 금지하도록 함
  • REINDEX DATABASE와 reindexdb가 시스템 카탈로그의 인덱스를 처리하지 않도록변경함. 원한다면 REINDEX SYSTEM과 reindexdb --system을 사용하여 가능하긴 함
  • 상속된 혹은 파티션된 테이블에서 GENERATED 표현식 제약 조건을 강화함
  • pg_walinspect 함수인 pg_get_wal_records_info_till_end_of_wal 및 pg_get_wal_stats_till_end_of_wal()을 제거함
  • 서버 변수인 force_parallel_mode를 debug_parallel_query로 개명함
  • 수동으로 ON SELECT 규칙을 사용한 뷰 생성 기능을 제거함
  • 서버 변수인 vacuum_defer_cleanup_age를 제거함
  • 서버 변수인 promote_trigger_file을 제거하고 스탠바이를 프라이머리로 승격시키는 더 간단한 방법이 도입됨
  • 읽기전용 서버 변수인 lc_collate 및 lc_ctype을 제거함
  • 역할 상속이 이제 GRANT 시 멤버 역할의 기본 상속 상태를 제어함
  • CREATEROLE 권한의 권한 및 다른 역할 수정 기능을 제한함
  • postmaster 바이너리에 대한 심볼릭 링크를 제거함

 

변경 사항

Server 

Optimizer

  • 더 많은 경우에 DISTINCT를 포함하여 증분 정렬 허용함
  • ORDER BY 또는 DISTINCT를 가진 집계에 대해 사전 정렬된 데이터를 사용 가능하게 함
  • UNION ALL위에 memoize를 허용함
  • 널을 허용하지 않는 인풋을 내부 테이블로 사용하여 anti-joins 수행을 허용함
  • FULL 및 내부(internal) right 아우터 해시 조인의 병렬 처리를 허용함
  • GIN 인덱스 접근 최적화 비용의 정확성을 개선함

General Perfomance

  • heap 및 인덱스 페이지의 효율적 추가를 허용함
  • non-freeze 작업 중에 적절한 경우 페이지의 동결을 수행함
  • RANGE 모드가 활성화되어 있지만 필요하지 않은 경우에 윈도우 함수가 내부적으로 더 빠른 ROWS 모드를 사용하도록 허용함
  • 항상 증가하는 윈도우 함수인 ntile(), cume_dist(), percent_rank()의 최적화를 허용함
  • 집계 함수 string_agg() 및 array_agg를 병렬로 처리할 수 있도록 허용함
  • RANGE 및 LIST 파티션 조회 캐싱으로 성능이 개선됨
  • vacuum 및 analyze에 의한 공유 버퍼 사용량 제어를 허용함
    • VACUUM/ANALYZE 옵션인 BUFFER_USAGE_LIMIT 및 vacuumdb 옵션인 --buffer-usage-limit으로 제어
  • 윈도우 OS에서 wal_sync_method=fdatasync를 지원함
  • BRIN-인덱싱된 컬럼만 업데이트된느 경우 HOT 업데이트를 허용함
  • 프로세스 타이틀 업데이트 속도를 개선함
  • xid/subxid 검색 및 ASCII 문자열 감지에 벡터 연산 사용을 허용함
  • 메모리 할당의 오버헤드를 감소함

Monitoring

  • 시스템 뷰인 pg_stat_io 의 추가로 i/o 통계를 추적할 수 있음
  • 테이블의 마지막 순차(full scan  의미하는 듯) 및 인덱스 스캔에 대한 통계를 기록함
  • 업데이트된 행이 새 페이지로 이동한 경우의 발생 통계를 기록함
  •  pg_locks 시스템 뷰에 추측적 잠금 정보를 추가함
  • pg_prepared_statements 뷰에 준비된 문의 결과 유형을 표시함
  • 구독 생성 시 구독 통게 항목 생성으로 stats_reset의 정확성이 향상됨
  • 임시 테이블 쓰기의 I/O 회계(accounting)을 정정함
  • pg_stat_get_backend_subxact() 함수의 추가로 세션의 서브트랜잭션 캐시를 보고하도록 함
  • 변경되지 않는 백엔드 id를 사용하는 pg_stat_get_backend_idset(), pg_stat_get_backend_activity() 및 관련 함수를 가지게 됨

privileges

  • 구독 생성 권한을 가진 사전 정의된 역할인 pg_create_subscription을 추가함
  • 구독이 비밀번호를 요구하지 않도록 허용함
  • LOCK TABLE에 대한 권한을 간소화함
  • ADMIN OPTION으로 GROUP에 USER를 추가 허용할 수 있음
  • GRANT에 WITH ADMIN TRUE/FALSE 문법 사용을 허용함
  • 다른 역할을 생성하는 역할이 새 역할의 권리를 자동으로 상속하거나 새 역할로 SET ROLE을 할 수 있도록 허용함
  • 비상속 역할의 기본 권한 변경을 사용자가 할 수 없도록 제한함
  • SET ROLE 사용 권한을 제어하는 GRANT를 추가함
  • 부여된 권한을 가진 역할에 대해 의존성 추적을 추가함
  •  GRANT 기록의 부여자에 대한 의존성 추적을 보장하도록 함
  • 여러 역할 멤버십 기록을 허용함
  • 부트스트랩 사용자의 슈퍼유저 권한 제거를 방지함
  • makeaclitem()이 여러 권한 이름을 받아들일 수 있도록 허용함

Server Configuration

  • Kerberos 자격 증명 위임 지원을 추가함
  • 서버 변수 scram_iterations를 사용하여 SCRAM 반복 횟수 설정을 허용함
  • 서버 변수 관리 성능을 개선함
  • 리셋 가능한 서버 변수에 대한 제한을 강화함
  • 다양한 postgresql.conf 항목을 새로운 카테고리로 이동함
  • 구성 파일 재귀를 10단계 이상으로 방지함
  • 오토배큠이 지연 설정 변경을 더 자주 적용하도록 허용함
  • 아카이브 파일이 내구적으로 이름이 바뀌어야 한다는 제한을 제거함
  • archive_library와 archive_command를 동시에 설정하지 못하게 함
  • postmaster가 자식 프로세스를 abort 신호로 종료할 수 있도록 허용함
  • 가능하지 않는 postmaster -n 옵션을 제거함
  • pg_use_reserved_connections 멤버십을 가진 역할을 위한 백엔드 슬롯 예약을 허용함
  • 윈도우 10의 새로운 버전에서 큰 페이지를 작동시키기 위한 특별 처리를 추가함
  • 개발자 사용을 위한 debug_io_direct 설정을 추가함
  • pg_slit_walfile_name()의 추가로 WAL 파일 이름의 세그먼트 및 타임라인 값을 보고함

pg_hba.conf

  • pg_hba.conf에서 DB 및 역할 항목에 대한 정규 표현식 일치 지원을 추가함
  • pg_ident.conf의 사용자 열 처리를 pg_hba.conf와 일치하도록 개선함
  • pg_hba.conf 및 pg_ident.conf에 포함파일을 허용함
  • pg_hba.conf 토큰의 길이를 무제한으로 허용함
  • 시스템 뷰인 pg_hba_file_rules에 규칙 및 맵 번호를 추가함

Localization

  • ICU 사용 시 로케일로부터 기본 인코딩을 결정함
  • CREATE DATABASE 및 CREATE COLLATION의 LOCALE 옵션, initdb 및 createdb의 --locale 옵션으로 libc가 아닌 정렬 제공자를 제어하도록 함
  • ICU 지원이 활성화된 경우에만 작동하는 사전 정의된 정렬 규칙 unicode와 ucs_basic을 추가함
  • CREATE COLLATION의 새 RULES 절을 사용하여 맞춤형 ICU 정렬 규칙 생성을 허용함
  • 윈도우 OS에서 시스템 로케일을 자동으로 가져올 수 있도록 허용함

Logical Replication

  • 스탠바이에서의 논리 디코딩을 허용함
  • 논리 디코딩 발행자가 변경 사항을 어떻게 전송하고 구독자가 어떻게 적용하는지 제어하는 서버 변수 debug_logical_replication_streaming 를 추가함
  • 논리 복제 초기 테이블 동기화 시 행을 이진 형식으로 복사하도록 허용함
  • 논리 복제의 병렬 적용을 허용함
  • 기본 키 없이 논리 복제 적용 성능을 개선함
  • 논리 복제 구독자가 원본 없는 변경 사항만 처리하도록 허용함
  • 논리 복제 SELECT 및 DML 작업을 테이블 소유자로 수행함
  • wal_retrieve_retry_interval을 구독별로 작동하도록 변경함

Utility Commands

  • EXPLAIN 명령에 GENERIC_PLAN 옵션을 추가하여 파라미터화된 쿼리의 일반 계획을 표시하도록 함
  • COPY FROM 값이 열의 DEFAULT로 매핑될 수 있도록 허용함
  • 외부 테이블에 COPY를 사용하여 배치로 행 추가를 서용하도록 함
  • CREATE TABLE에 의해 STORAGE 타입을 지정할 수 있도록 허용함
  • 외부 테이블에 대한 TUNCATE 트리거를 허용함
  • 배큠 및 vacuumdb가 TOAST 테이블만 처리하도록 허용함
  • 배큠 옵션에 SKIP_DATABASE_STATS 및 ONLY_DATABASE_STATS를 추가함
  • REINDEX DATABASE 및 REINDEX SYSTEM이 더 이상 인수를 요구하지 않도록 변경함
  • CREATE STATISTICS가 이름이 지정되지 않은 경우 통계 이름을 생성할 수 있도록 허용함

Data Types

  • 2진수 '0b100101'등의 십진법이 아닌 정수의 리터럴을 허용함
  • NUMERIC이 모든 크기의 16진수, 8진수, 2진수 정수를 처리할 수 있도록 허용함
  • 정수 및 숫자 상수에서 언더스코어 사용을 허용함
  • datetime 입력에서 +infinity 표기법을 수용함
  • datetime 문자열에서 epoch와 infinity를 다른 필드와 함께 지정하는 것을 방지함
  • YyearMmonthDday 형식의 문서화되지 않은 날짜 입력 지원을 제거함
  • 타입 변환 오류를 체크하기 위한 함수로 pg_input_is_valid() 및 pg_input_error_info()를 추가함

General Queries

  • FROM 절의 서브쿼리에서 별칭 생략을 허용함
  • SQL/JSON 경로에서 향상된 숫자 리터럴 지원을 추가함

Functions

  • sql/json 생성자(constructors)를 추가함
  • SQL/JSON 객체 검사를 추가함
  • JSON 문자열 파싱이 벡터 연산을 사용할 수 있도록 허용함
  • OR 및 NOT 표현식에 대한 full text highlighting 함수인 ts_headline()의 처리를 개선함
  • 지정된 시간대에서 timestamptz 값에 대한 더하기, 빼기 및 생성 기능을 추가함
  • data_trunc(unit, timestamptz, time_zone)을 불변 함수로 변경함
  • array_sample() 및 array_shuffle() 함수를 추가함
  • 집합에서 어떤 값을 반환하는 집계 함수 ANY_VALUE()를 추가함

PL/PgSQL

  • PL/pgSQL에서 현재 함수의 OID를 얻을 수 있는 기능을 추가함
  • libpq 온결 옵션에 'requre_auth'를 추가하여 허용되는 인증 방법 목록을 지정하도록 함
  • libpq에서 지정된 여러 호스트가 무작위로 선택될 수 있도록 허용함
  • libpq 옵션 중에 'sslcertmode'를 추가하여 클라이언트 인증서의 전송을 제어함
  • libpq가 시스템 인증서 풀(pool)을 사용하여 인증서 검증을 할 수 있도록 허용함

Client Applications

  • ECPG 변수 선언에서 예약되지 않은 SQL 키워드와 일치하는 typedef 이름을 사용할 수 있도록 허용함

psql

  • psql에서 확장 형식의 헤더 라인 최대 너비 제어를 허용함
  • psql 명령어에 'drg' 추가로 역할 멤버십 상세 정보를 표시함
  • psql의 접근 권한 명령어인 \dpS 및 \zS로 가 시스템 객체를 표시하도록 허용함
  • psql \d+에서 외부 테이블 자식 및 파티션에 FOREIGN 지정 표시를 추가함
  • \df+가 함수 소스 코드를 표시하지 않도록 변경함
  • psql이 확장된 쿼리 프로토콜을 사용하여 쿼리를 제출할 수 있도록 허용함
  • psql의 \watch가 실행횟수를 제한할 수 있도록 허용함
  • psql 스크립트가 쉘 명령 및 쿼리의 종료 상태를 얻을 수 있도록 허용함
  • 다양한 psql 탭 완성을 개선함

pg_dump

  • pg_dump에서 자식 테이블 및 파티션 덤프 제어를 추가함
  • pg_dump에 LZ4 및 Zstandard 압축을 추가함
  • pg_dump 및 pg_basebackup에서 압축에 long 모드 사용을 허용함
  • pg_dump가 더 일관된 압축 구문을 수용하도록 개선함

Server Applications

  • initdb에 서버 변수를 설정하는 옵션을 추가함
  • createuser에 더 많은 사용자 옵션을 제어하는 옵션을 추가함
  • createuser 옵션 –role의 사용을 중단함
  • vacuumdb 스키마 처리 제어를 위한 온셥을 추가함
  • pg_upgrade가 새 클러스터의 로케일 및 인코딩을 설정할 수 있도록 함
  • pg_basebackup이 숫자 압축 옵션을 받아들이도록 개선함
  • pg_verifybackup에 진행 상황 보고 지원을 추가함

Source code

  • ICU 지원을 기본적으로 빌드함
  • x86-64 아키텍처에서 SSE2 벡터 연산 지원을 추가함
  • ARM 아키텍처에서 Advanced SIMD 명령어 지원을 추가함
  • 윈도우 OS 바이너리가 MSVC를 사용하여 RandomizedBaseAddress와 함께 빌드되도록 함
  • 확장 라이브러리가 기본적으로 심볼을 내보내지 않도록 함
  • 윈도우 10 또는 더 새로운 버전을 요구하도록 함
  • Perl 버전 5.14이상을 요구하도록 함
  • GSSAPI 지원을 위해 MIT KErberos를 요구하도록 함

Additional Modules

  • boolean 컬럼에 대한 확장 기반 인덱스 사용을 개선함
  • fuzzystrmatch에 Daitch-Mokotoff Soundex 지원을 추가함
  • auto_explain이 파라미터화된 문장에 전달된 값을 로깅하도록 허용함
  • auto_explain의 log_verbose 모드가 compute_query_id의 값을 존중하도록 변경됨
  • ltree 라벨의 최대 길이를 256에서 1000으로 변경하고 하이픈을 허용함
  • pg_stat_statements가 유틸리티 명령에서 사용된 상수를 정규화하도록 개선함
  • pg_walinspect 함수인 pg_get_wal_block_info()를 추가하여 WAL 블록 정보를 보고하도록 함
  • pg_walinspect 함수인 pg_get_wal_records_info() 및 pg_get_Wal_stats()가 종료 LSN을 해석하는 방식을 변경함
  • pg_walinspect와 pg_waldump에 WAL 레코드의 자세한 설명을 추가함
  • pageinsepct 함수 bt_multi_page_stats()를 추가하여 여러 페이지에 대한 통계를 보고하도록 함

postgres_fdw

  • postgres_fdw가 병렬로 중단(abort) 작업을 수행할 수 있게 함. 이 기능은 parallel_abort로 활성화됨
  • 외부 postgres_fdw 테이블에 대한 ANALYZE 작업이 보다 효율적으로 수행됨. analyze_sampling 옵션으로 샘플링 방법을 제어할 수 잇도록 함
  • postgres_fdw를 통해 reg* 타입 상수를 전송할 때, 내장 객체나 shippable로 표시된 확장을 참조하는 경우에만 제한함

 

참고

728x90
반응형