728x90
반응형
목적
최신 버전 업그레이드 전, 영향도 평가하기 위함
개요
- 저장 프로시저가 이제 OUT 파라미터를 통해 데이터를 반환할 수 있음
- 공통 테이블 표현식(CTE)을 위한 SQL 표준 SEARCH와 CYCLE 옵션이 구현됨
- 이제 배열 뿐만 아니라 유용한 표기법으로 사용되는 모든 데이터 유형에 대해 첨자(subscripting)를 적용할 수 있음. 이번 릴리즈에서는 jsonb 및 hstore 유형이 첨자 연산자를 획득함
- Range 타입이 multiranges를 추가함으로써 확장되어, 연속되지 않은 데이터 범위를 표현할 수 있게 됨
- 병렬 쿼리, 높은 동시 작업 부하, 파티션된 테이블, 논리 복제 및 배큠 작업에 대해 다수의 성능 개선이 이루어짐
- 비트리 인덱스 업데이트가 더 효율적으로 관리되어, 인덱스 팽창(bloat)가 감소됨
- 배큠이 DB가 트랜잭션 ID wraparound 조건에 접근하기 시작하면더 공격적으로 되고, 필수적이지 않은 청소는 생략함
- 확장 통계가 이제 표현식에 대해서도 수집되어, 복잡한 쿼리에 대한 더 나은 계획 결과를 제공함
- libpq는 이제 여러 쿼리를 파이프라인 처리할 수 있는 능력을 가지고 있으며, 이는 고지연 연결에서 처리량을 증가시킬 수 있음
해당 버전으로의 이관 가이드
- pg_dumpall 또는 pg_upgrade 사용을 통한 dump/restore 방식이 요구됨
- 물리적 복제를 이용한 업그레이드 시 마스터노드 전에 세컨더리부터 진행할 것
이전 버전과의 비호환 내용
- 아래 해당되는 FBI는 재생성이 요구됨
- array_append()
- array_prepend()
- array_cat()
- array_position()
- array_positions()
- array_remove()
- array_replace()
- width_bucket()
- 내장된 기하학 데이터 타입 및 contrib 모듈인 cube, hstore, intarray, seg에 대한 @ 및 ~ 포함 연산자가 제거됨. 대신 <@ 및 @>를 권장함
- to_tsquery 및 websearch_to_tsquery()를 수정하여 폐기된 토큰을 포함한 쿼리 텍스트를 올바르게 구문 분석하도록 함. 즉 반환값이 바뀌었다는 의미.
- websearch_to_tsquery('"pg_class pg"') 및 to_tsquery('pg_class <-> pg')는 이전에 ( 'pg' & 'class' ) <-> 'pg'를 출력했지만, 이제는 'pg' <-> 'class' <-> 'pg'를 출력함
- webserach_to_tsquery()를 수정하여 따옴표 안의 여러 인접한 폐기된 토큰을 올바르게 구문 분석함. 즉, 반환값이 바뀜
- websearch_to_tsquery('"aaa: bbb"')는 'aaa' <2> 'bbb'를 출력했지만, 이제는 'aaa' <-> 'bbb'를 출력함
- EXTRAC T()를 변경하여 numeric 타입 대신 float8을 반환함
- 숫자 매개변수를 가진 var_samp() 및 stddev_samp()가 단일 NaN에 대해 NaN이 아닌 NULL을 반환하도록 함
- 존재하지 않거나 삭제된 열에 대한 has_column_privilege() 검사에서 속성 번호를 사용할 때 false를 반환하도록 함
- 무한 윈도우 함수 범위의 처리를 수정함
- 팩토리얼 연산자인 ! 및 !! 및 함수 numeric_fac()를 제거함. factorial() 함수는 여전히 지원됨
- 음수에 대한 factorial()를 금지함
- 후위(right-unary) 연산자 지원을 제거함
- 정규 표현식 개행-민감(newline-sensitive) 모드에서 \D와 \W 단축키가 줄바꿈과 일치하도록 변경함
- 정규 표현식 역참조 시 제약 조건을 무시하도록 함
- 정규 표현식 문자 클래스에서 \w를 범위 시작 또는 끝으로 사용하지 못하도록 변경함
- 사용자 정의 서버 매개변수 이름이 따옴표 없는 SQL 식별자에서 유효한 문자만 사용하도록 요구함
- 파라미터 vaccum_cleanup_index_scale_factor를 제거함
- 파라미터 operator_precedence_warning을 제거함
- pg_hba.conf에서 clientcert의 명세를 대대적으로 개편함
- SSL 압축 지원을 제거함
- 버전 2 와이어 프로토콜에 대한 서버 및 libpq 지원을 제거함
- CREATE/DROP LANGUAGE 명령에서 언어 이름의 단일 따옴표 사용을 금지함
- 시퀀스와 토스트 테이블에 대해 이전에 생성된 복합 타입(composite types)을 제거함
- ecpg SQL 명령 문자열에서 중복된 따옴표 처리를 수정함
- intarray의 포함 연산자(<@ 및 @>)가 GiST 색인을 사용하지 못하도록 변경함
- contrib 프로그램 pg_standby를 제거함
- tablefunc의 함수 normal_rand()가 음수 값을 받지 못하도록 변경함
변경 사항
Server
- pg_read_all_data 및 pg_write_all_data 라는 사전 정의된 역할을 추가함
- 현재 데이터베이스 소유자만 포함하는 pg_database_owner라는 사전 정의된 역할을 추가함
- 백엔드 충돌 후 임시 파일을 제거함
- 클라이언트가 연결이 끊어지면 장기 실행 쿼리를 취소할 수 있도록 허용함. 서버 매개변수인 client_connection_check_interval을 통해 여부를 확인할 수 있음
- pg_terminate_backend()에 선택적 타임아웃 매개변수를 추가함
- 거의 비어 있는 힙 페이지에 항상 넓은 튜플 추가를 허용함
- SSL 연결 패킷에 서버 이름 표시(SNI)를 추가함
Vacuuming
- 배큠이 제거 가능한 인덱스 항목 수가 미미할 경우 인덱스 배큠을 건너뛸 수 있도록 허용함
- 배큠이 삭제된 비트리 페이지를 더 적극적으로 free space map(FSM)에 추가할 수 있도록 허용함
- 배큠이 사용되지 않는 후행 힙 라인 포인터가 사용한 공간을 회수할 수 있도록 함
- 배큠이 최소 잠금 인덱스 작업 중 데드 튜플을 더 공격적으로 제거할 수 있도록 허용함
- 많은 테이블을 가진 DB의 배큠 속도를 향상함
- vacuum_cost_page_miss의 기본값이 현재 하드웨어 능력을 더 잘 반영하도록 줄임
- TOAST 테이블의 배큠 건너뛰기 기능을 추가함
- COPY FREEZE가 페이지 가시성 비트(visibility bits)를 적절하게 업데이트하도록 함
- 테이블이 xid 또는 multixact wraparound에 근접한 경우 배큠 작업을 더 공격적으로 수행하도록 함
- vacuum_failsafe_age 및 vacuum_multixac_failsafe_age로 제어
- 오토배큠 로깅 출력에 인덱스별 정보 추가함
Partitioning
- 많은 파티션을 가진 파티션된 테이블에서 업데이트 및 삭제의 성능이 개선됨
- 파티션을 차단하지 않는 방식으로 분리할 수 있도록 허용함
- ALTER TABLE ... DETACH PARTITION ... CONCURRENTLY 및 FINALIZE
- 파티션 경계 값에서 COLLATE 절을 무시함
Index
- 비트리 인덱스 추가가, 만료된 인덱스 항목을 제거하여 페이지 분할을 방지하도록 함
- BRIN 인덱스가 범위별로 여러 최소/최대 값을 기록할 수 있도록 허용함
- BRIN 인덱스가 블룸 필터를 사용할 수 있도록 허용함
- 일부 GiST 인덱스를 데이터 사전 정렬을 통해 구축할 수 있도록 허용함
- SP-GiST 인덱스가 INCLUDE된 열을 포함할 수 있도록 허용함
Optimizer
- IN 절에서 많은 상수에 대한 해시 조회를 허용함
- OR 절 추정(estimation)을 위한 확장 통계 사용 가능한 위치 수를 증가함
- 표현식에 대한 확장 통계를 허용함
- pg_stats_ext_exprs 뷰 참고
- TID 범위의 효율적인 힙 스캐닝을 허용함
- EXPLAIN CREATE TABLE AS 및 EXEPLAIN CREATE MATERIALIZED VIEW가 IF NOT EXISTS를 존중하도록 수정함
General Performance
- 많은 CPU와 높은 세션 수를 가진 시스템에서 MVCC 가시성 스냅샷 계산 속도가 개선됨
- nl조인의 내부에서 결과를 기억하는 실행기 메소드를 추가함
- 윈도우 함수가 증분 정렬을 수행할 수 있도록 허용함
- 병렬 순차 스캔의 I/O 성능이 개선됨
- 여러 외부 테이블을 참조하는 쿼리가 외부 테이블 스캔을 병렬로 수행할 수 있도록 허용함
- postgres_fdw는 async_capable이 설정되어야 함
- analyze가 페이지 prefetching에 의해 제어되도록 함
- 정규 표현식 검색 성능이 개선됨
- 유니코드 정규화 성능을 크게 향상함
- TOAST 데이터에 LZ4 압축 사용이 가능함
- default_toast_compression을 통해 가능함
- 기본 설정은 pglz임
- 서버가 --with-lz4로 컴파일되어야 사용 가능함
Monitoring
- 서버 파라미터인 compute_query_id가 활성화되면 pg_stat_activity, EXPLAIN VERBOSE, csvlog 및 선택적으로 log_line_prefix에서 쿼리 ID를 표시할 수 있음
- 오토배큠 및 auto-analyze의 로깅을 개선함
- track_io_timing이 활성화된 경우 I/O 타이밍을 보고함
- 클라이언트에 의해 제공된 원래 사용자 이름에 대한 정보를 log_connections 출력에 추가함
System Views
- COPY 진행 상황 보고를 위한 시스템 뷰 pg_stat_progess_copy가 추가됨
- WAL 활동을 보고하는 시스템 뷰 pg_stat_wal이 추가됨
- 복제 슬롯 활동을 보고하는 시스템 뷰 pg_stat_replication_slots가 추가됨
- 세션 메모리 사용량을 보고하는 시스템 뷰 pg_backend_memory_contexts를 추가함
- pg_log_backend_memory_contexts()는 임의의 백엔드의 메모리 컨텍스트를 출력함
- pg_stat_database 시스템 뷰에 세션 통계 추가
- pg_locks에 잠금 대기 시작 시간 추가함
- WAL 수신자 종료 대기 시간을 보고하는 대기 이벤트 WalReceiverExit를 추가함
- 정보 스키마 뷰 routine_column_usage를 구현하여 함수 및 절차의 기본 표현식에 의해 참조된 열을 추적하도록 함
Authentication
- SSL 인증서의 고유 이름(DN)을 클라이언트 인증서 인증에 매치할 수 있도록 허용함
- pg_hba.conf 및 pg_ident.conf 레코드가 여러 줄에 걸쳐 있을 수 있도록 허용함
- 인증서 철회 목록(CRL) 디렉토리의 명세를 허용함
- 임의 길이의 비밀번호를 허용함
Server Configuration
- 유휴 세션을 닫기 위한 서버 매개변수 idle_session_timeout이 추가됨
- idle_in_transaction_session_timeout과 유사함
- checkpoint_completion_target 기본값을 0.5 > 0.9로 변경함
- log_line_prefix에 %P를 사용하여 병렬 작업자의 병렬 그룹 리더 PID 보고를 허용함
- unix_socket_directories에 개별적인 쉼표로 구분된 따옴표로 묶인 문자열로 경로 지정을 허용함
- 시작 시 동적 공유 메모리 할당을 허용함
- min_dynamic_shared_memory에 의해 제어됨
- 리눅스에서 사용되는 거대 페이지(huge page)의 크기를 제어하는 서버 매개변수 huge_page_size를 추가함
Streaming Replication And Recovery
- standby 서버를 pg_rewind에 의해 되감을(rewound) 수 있도록 허용함
- 서버 리로드 중 restore_command 설정을 변경할 수 있도록 허용함
- 긴 복구 충돌 대기 시간을 보고하는 서버 매개변수인 log_recovery_conflict_waits를 추가함
- 주 서버가 스탠바이에서 재생을 방지하는 방식으로 매개변수를 변경할 경우 핫 스탠바이 서버의 복구를 즉시 중단에서 일시 중단으로 변경함
- 복구 상태를 보고하는 함수 pg_get_wal_replay_pause_state()를 추가함
- pg_is_wal_replay_paused()보다 더 상세한 정보를 제공함
- 읽기 전용 서버 매개변수인 in_hot_standby가 추가됨
- 클러스터에 많은 공유 버퍼가 있는 경우 복구 중 작은 테이블의 절단(trunaction) 속도가 향상됨
- 리눅스에서 충돌 복구 시작 시 파일 시스템 동기화를 허용함
- 지정된 트랜잭션의 커밋 타임스탬프와 복제 원점을 반환하는 함수 pg_xact_commit_timestamp_origin()을 추가함
- 표준 함수 권한 제어를 사용하여 복제 원점 함수 제어를 허용함
Logical Replication
- 진행 중인 긴 트랜잭션을 구독자에게 스트리밍할 수 있도록 논리적 복제를 허용함
- 진행 중인 큰 트랜잭션을 스트리밍할 수 있도록 논리적 복제 API를 개선함
- 논리적 복제 중 테이블 동기화에서 여러 트랜잭션을 허용함
- 즉시 WAL-로그 하위 트랜잭션 및 최상위 XID를 연결함
- 논리적 디코딩 API를 개선하여 두 단계 커밋 처리를 하도록 함
- pg_create_logical_replication_slot()을 통해 제어됨
- 논리적 복제를 사용할 때 명령 완료 시 WAL에 캐시 무효화(invalidation) 메시지를 추가함
- 논리적 디코딩이 캐시 무효화를 메시지를 보다 효율적으로 처리할 수 있도록 함
- 논리적 디코딩 메시지가 복제 스트림으로 전송되는지 여부를 제어하도록 허용함
- 논리적 복제 구독이 바이너리 전송 모드를 사용할 수 있도록 허용 함
- 논리적 디코딩을 xid에 의해 필터링할 수 있도록 허용함
SELECT, INSERT
- AS 없이 열 레이블로 사용할 수 없는 키워드를 감소함
- JOIN의 USING 절에 별칭을 지정할 수 있도록 허용함
- GROUP BY에 DISTINCT를 추가하여 GROUPING SET 조합의 중복을 제거할 수 있도록 허용 함
- INSERT의 다중 행 VALUES 목록에 DEFAULT 항목을 올바르게 처리하도록 함
- CTE에 대한 SQL 표준 SEARCH 및 CYCLE 절을 추가함
- ON CONFLICT의 WHERE 절에서 열 이름을 테이블로 한정할 수 있도록 허용
Utility Commands
- REFRESH MATERAILIZED VIEW가 병렬 처리를 사용할 수 있도록 허용함
- REINDEX가 TATBLESPACE절을 지정하여 새 인덱스의 테이블스페이스를 변경할 수 있도록 허용함
- REINDEX가 파티션된 테이블의 모든 자식 테이블 또는 인덱스를 처리할 수 있도록 허용함
- CONCURRENTLY를 사용하는 인덱스 명령이 CONCURRENTLY를 사용하는 다른 작업의 완료를 기다리지 않도록 허용함
- 바이너리 모드에서 COPY FROM의 성능이 개선됨
- 뷰 정의에서 SQL 표준 문법을 유지하도록 개선함
- GRANT 및 REVOKE에 SQL 표준 절 GRANTED BY를 추가함
- CREATE TRIGGER에 OR REPLACE 옵션을 추가함
- 외부 테이블에서 TRUNCATE 작업을 수행할 수 있도록 허용함
- postgres_fdw 모듈도 이제 이를 허용함
- 구독에 출판물(publication)을 쉽게 추가하거나 제거할 수 있도록 허용함
- ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION을 통해 가능함
- 시스템 카탈로그에 기본 키, 고유 제약 조건, 외래 키를 추가함
- pg_get_catalog_foreign_keys()에서 알 수도 있음
- CURRENT_USER가 허용되는 모든 곳에서 CURRENT_ROLE 사용도 허용됨
Data Types
- 확장 및 내장 데이터 타입이 subscripting을 구현할 수 있도록 허용함
- JSONB의 subscripting을 허용함
- multirange 데이터 타입 지원을 추가함
- tsearch 데이터 파일의 라인 길이에 제한이 없도록 허용함
- numeric 데이터 타입에서 Infinity 및 -Infinity 값 지원을 추가함
- LSN 및 숫자(바이트) 값을 더하고 빼는 연산자를 추가함
- 배열 및 레코드 OID 불일치에 대해 이진 데이터 전송이 더 관대하도록 허용함
Functions
- SQL 언어 함수 및 프로시저가 SQL 표준 함수 본문을 사용할 수 있도록 허용 함
- 프로시저가 OUT 매개변수를 가질 수 있도록 허용함
- 일부 배열 함수가 호환 가능한 데이터 타입의 혼합에서 작동할 수 있도록 허용(상단의 개요 항목 참고)
- SQL 표준 trim_array() 함수가 추가됨
- split_part()에서 음수 인덱스를 지원함
- 구분자를 사용하여 문자열을 분할하는 string_to_table() 함수를 추가함
- regexp_split_to_table()과 유사함
- XOR 집계 함수인 bit_xor()가 추가됨
- 비트 또는 바이트 문자열에서 설정된 비트 수를 반환하는 함수 bit_count()가 추가됨
- date_bin() 함수가 추가됨
- make_timestamp(), make_timestamptz()가 음수 연도를 허용하도록 변경됨. 음수 값은 BC 연도로 해석함
- 새로운 SQL 표준 정규 표현식으로 substring() 문법이 추가됨
- 정규 표현식 괄호 내에 \D, \S, \W의 보완된 문자 클래스 이스케이프를 허용함
- lead() 및 lag() 윈도우 함수의 기본값에 대해 보다 유연한 데이터 타입을 허용함
- 0이 아닌 부동 소수점 값을 무한대로 나누면 0을 반환하도록 변경함
- NaN을 0으로 나누는 부동 소수점 나눗셈이 에러가 아닌 NaN을 반환하도록 함
- 음수 무한대 지수에 대한 exp() 및 power()가 언더플로우 오류가 아닌 0을 반환하도록 변경함
- 무한대를 포함하는 기하학적 계산의 정확도를 개선함
- pg_describe_object(), pg_identfify_object() 및 pg_identify_object_as_address()가 존재하지 않는 객체에 대해 항상 유용한 오류 메시지를 보고하도록 변경됨
PL/PgSQL
- PL/pgSQL의 표현식 및 할당 구문 분석을 개선함
- PL/pgSQL의 RETURN QUERY가 쿼리를 병렬 처리를 사용하여 실행할 수 있도록 허용함
- PL/pgSQL 절차 내에서 반복적인 CALL의 성능을 개선함
Client Interfaces
- libpq에 파이프라인 모드를 추가함
- libpq의 target_session_attrs 매개변수 옵션을 강화함
Client Applications
- vacuumdb가 인덱스 정리 및 축소를 건너뛸 수 있도록 허용함
- --no-index-cleanup 및 --no-truncate 옵션으로 제어
- pg_dump가 특정 확장만 덤프할 수 있도록 허용함
- pgbench가 값의 무작위 순서 변경을 위한 permute() 함수를 추가함
- -C 옵션을 사용할 때 pgbech의 재연결 오버헤드 측정에 연결 해제 시간을 포함함
- pg_dump, pg_dumpall 및 pg_restore에서 다중 verbose 옵션 지정(-v)을 통해 로깅 세부도를 높일 수 있도록 허용함
psql
- psql의 \df 및 \do 명령이 함수 및 연산자 인자 유형을 지정할 수 있도록 허용함
- psql의 \dt 및 \di가 TOAST 테이블과 그 인덱스를 표시하도록 허용함
- 확장 통계 객체를 나열하는 PSQL 명령어 \dX를 추가함
- psql의 \dT가 배열 구문과 백엔드 문법 별칭을 이해하도록 수정함. 예를 들어 int를 integer로 함
- 탭 자동 완성 기능을 개선함
Server Applications
- 많은 테이블에 대한 contrib/amcheck 테스트를 단순화하기 위해 CLI 유틸리티인 pg_amcheck가 추가됨
- initdb에 --no-instructions 옵션을 추가함
- postmaster에 -o 옵션 지원이 중단됨
Documentation
- "Default Roles"를 "Predefined Roles"로 이름을 변경함
- factorial() 함수에 대한 문서를 추가함
Source Code
- SSL 라이브러리 선택을 위한 구성 옵션인 --with-ssl={openssl}이 추가됨
- 호환성을 위해 --with-openssl 표기도 유지됨
- 추상적인 Unix-domain 소켓 지원이 추가됨
- 윈도우 OS에서 4GB를 초과하는 파일을 적절하게 처리할 수 있또록 허용함
- 테스트 목적으로 캐시 플러싱(flushing)을 제어하는 서버 매개변수 debug_discard_caches가 추가됨
- SHA1, SHA2 및 MD5 해시 계산이 OpenSSL EVP API를 사용하도록 변경됨
- FreeBSD에 대한 콜레이션 버전 지원을 추가함
Additional Modules
- hstore 값에 대한 subscripting을 허용함
- GiST/GIN pg_trgm 인덱스가 "=" 조회를 수행할 수 있도록 허용함
- cube 데이터 타입이 이진 모드로 전송될 수 있도록 허용됨
- pgstattuple_approx()가 TOAST 테이블에 대한 보고를 할 수 있도록 허용함
- 행 가시성을 변경할 수 있도록 하는 contirb 모듈 pg_surgery가 추가됨
- 활성된 old_snapshot_threshold에 의해 사용된 XID/시간 매핑을 보고하는 contrib 모듈인 old_snapshot이 추가됨
- amcheck가 힙 페이지도 검사할 수 있도록 허용함
- pageinspect가 GiST 인덱스를 검사할 수 있도록 허용함
- pageinspect 블록 번호를 bigint로 변경함
- bitree_gist 함수를 병렬 안전으로 표시함
pg_stat_statements
- 쿼리 해사 계산을 pg_stat_statements에서 코어 서버로 이동함
- pg_stat_statements가 상위 및 중첩 문장을 별도로 추적하도록 변경함
- pg_stat_statements에 유틸리티 명령의 행 수를 추가함
- pg_stat_statements 활동을 보여주는 pg_stat_statements_info 시스템 뷰를 추가함
postgres_fdw
- postgres_fdw가 대량으로 행을 삽입할 수 있도록 허용함
- postgres_fdw가 IMPORT FOREIGN SCHEMA ... LIMIT TO에 의해 지정된 테이블 파팃녀을 가져올 수 있도록 허용함
- postgres_fdw 함수인 postgres_fdw_get_connections()를 추가하여 열린 외부 서버 연결을 보고할 수 있도록 함
- 트랜잭션 완료 후 외부 서버가 연결을 유지하는지 여부를 제어할 수 있도록 허용함
- keep_connections에 의해 제어되며 기본값은 on임
- postgres_fdw가 필요에 따라 외부 서버 연결을 재설정할 수 있도록 허용함
- postgres_fdw 함수를 추가하여 캐시된 연결을 폐기하도록 함
참고
- PostgreSQL 14 Version doc
PostgreSQL: Documentation: 14: E.11. Release 14
728x90
반응형
'RDBMS > PostgreSQL' 카테고리의 다른 글
[PostgreSQL] 14.2 Release note 주요 내용 정리 (0) | 2024.03.16 |
---|---|
[PostgreSQL] 14.1 Release note 주요 내용 정리출 (0) | 2024.03.15 |
[PostgreSQL] 13.13 Release note 주요 내용 정리 (0) | 2024.03.11 |
[PostgreSQL] 13.12 Release note 주요 내용 정리 (0) | 2024.03.10 |
[PostgreSQL] 13.11 Release note 주요 내용 정리 (0) | 2024.03.09 |