본문 바로가기
RDBMS/PostgreSQL

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

by 연습장이 2024. 3. 25.
728x90
반응형

목적

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

 

개요

  • SQL MERGE 명령어를 지원함
  • 논리적 복제 출판물(publication) 내에서 특정 컬럼 목록과 행 필터 조건 등 테이블 내용의 선택적 공개
  • 압축 옵션을 확대하여 Zstandard(zstd) 압축 지원을 포함함
  • JSON 형식을 사용한 구조화된 서버 로그 출력을 지원함(json형식으로 서버 로그가 떨어진다는 말)
  • 성능 개선, 특히 메모리 내 및 디스크 기반 정렬에서의 성능이 향상됨

 

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

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

 

이전 버전과의 비호환 내용

  • 공용(public) 스키마의 PUBLIC 생성 권한을 제거함
  • public 스키마의 소유자를 새로운 pg_database_owner 역할로 변경함
  • 오래동안 만료된 독점(exclusive) 백업 모드를 제거함
    • pg_start/backup()/pg_stop_back() 함수는 pg_backup_start()/pg_backup_stop()으로 이름이 변경됨
    • pg_backup_start_time() 및 pg_is_in_backup() 함수는 제거됨
  • hash_mem_multiplier 기본값을 2.0으로 증가함. 따라서 쿼리 해시 작업이 더 많은 work_mem 메모리를 사용할 수 있음
  • 서버 측 언어 plpython2u 및 일반 Python 언어 plpythonu를 제거함
    • python 2.x는 더이상 지원되지 않음
  • 비어있는 문자열 배열 요소가 array_to_tsvector()에 전달될 경우 오류를 생성하도록 함
  • chr()에 음수 인자가 제공될 경우 오류를 생성하도록 함
  • CREATE OR REPLACE VIEW를 사용할 때 출력 열의 정렬 변경을 방지하도록 함
  • 길이가 0인 유니코드 식별자(u&"" 등) 사용을 금지함
  • 숫자 리터러 뒤에 비숫자 문자가 오는 것을 방지함
  • JSON 숫자 리터럴 처리를 SQL/JSON 표준에 맞게 조정함
  • interval 입력에서 월보다 큰 단위에 대한 소수 값을 제공할 경우 가장 가까운 월을 반올림하도록 함
  • 후행 기간이 있는 interval 파싱의 일관성을 개선함
  • interval 출력 함수를 변경 불가능이 아닌 안정적으로 표시함
  • interval justification 함수에서 정수 오버플로를 감지하도록 함
    • justify_interval(), justify_hours(), justify_days() 등이 해당됨
  • 비 ASCII 문자에 대한 "char" 타입의 I/O 타입을 변경함
  • 로그인 역할이 자신의 역할 멤버십에 대한 기본 ADMIN OPTION 권한을 제거함
  • 논리적 복제를 구독의 소유자로 실행할 수 있게 변경함
  • 구독 소유자가 테이블의 SELECT 권한이 없는 경우 UPDATE 및 DELETE 논리적 복제 작업을 방지하도록 함
  • EXPLAIN에서 세션의 임시 객체 스키마를 참조할 때 pg_temp로 표시함
  • pg_statio_all_tables에서 드문 경우의 TOAST 테이블에 대한 여러 인덱스의 값 합계를 수정함
  • 설치된 확장과 이름이 같지만 확장의 선언된 변수가 아닌 사용자 지정 옵션 설정으 ㄱ므지함
  • 사용되지 않는 서버 변수인 stat_temp_directory를 제거함
  • random() 계산 알고리즘을 개선함
  • libpq의 PQsendQuery() 함수가 파이프라인 모드에서 더 이상 지원되지 않도록 함
  • 윈도우 OS 플랫폼이 아닌 곳에서 사용자의 홈 디렉토리를 찾기 위해 HOME 환경 변수를 참조하도록 함
  • pg_dump의 --no-synchronized-snpshots 옵션을 제거함
  • psql의 --single-transaction 모드에서 오류가 감지된 후, ON_ERROR_STOP이 설정된 경우에만 최종 COMMIT 명령을 ROLLBACK으로 변경함
  • postgres_fdw가 전성하는 쿼리에서 불필요한 상수 캐스팅을 방지하도록 함
  • xml2의 xml_is_well_formed() 함수를 제거함
  • 사용자 정의 스캔 프로바이더가 프로젝션을 지원하는지 여부를 표시할 수 있게 변경함

 

변경 사항

Server 

  • 각 DB의 정렬(collation) 버전 기록 및 확인을 하도록 함
    • pg_database_collation_actual_version()으로 확인
    • ALTER DATABASE ... REFRESH로 DB의 정렬 버전을 운영 체제의 정렬 버전과 일치하도록 설정할 것
  • 클러스터 및 DB의 기본값으로 ICU 정렬 설정을 허용함
  • pg_ident.conf 정보를 보고하는 시스템 뷰 pg_ident_file_mappings를 추가함

Partitioning

  • 파티션된 테이블을 참조하는 쿼리의 계획 시간을 개선함
  • 파티션의 순서대로 스캔을 허용하여 정렬을 더 많은 경우에 피하도록 함
  • 파티션 간 행 이동을 수행하는 파티션된 테이블의 업데이트에 대한 외래키 동작을 개선함
  • 파티션된 테이블에 대한 CLUSTER 명령을 허용함
  • 파티션된 테이블에서 ALTER TIRGGER RENAME의 수정으로 모든 파티션의 트리거 이름을 적절하게 변경하도록 함

Indexes

  • 시스템 및 TOAST 테이블에 대한 비트리 인덱스가 중복을 효율적으로 저장하도록 허용함
  • 정렬을 사용하여 굴축된 GiST 인덱스의 조회 성능을 개선함
  • 고유 제약 조건 및 인덱스에서 NULL 값을 서로 다르지 않게 처리할 수 있도록 허용함
    • 이전에는 NULL 항목이 항상 서로 다른 값으로 처리되었지만 이제 UNIQUE NULLS NOT DISTINCT를 사용하여 제어함
  • ^@ 시작 연산자와 start_with() 함수가 C 정렬을 사용하는 경우 비트리 인덱스를 사용할 수 있게 허용함

Optimizer

  • 확장 통계가 부모와 모든 자식을 포함한 통계를 기록하도록 허용함
  • 서버 변수인 recursive_worktable_factor를 추가하여 사용자가 재귀 쿼리의 작업 테이블의 예상 크기를 지정할 수 있도록 함

General Performance

  • 많은 상수가 포함된 NOT IN 절에 대한 해시 조회를 허용함
  • SELECT DISTINCT를 병렬화할 수 있게 허용함
  • UTF-8 텍스트의 인코딩 검증 속도를 향상, 한 번에 16바이트씩 처리하도록 함
  • work_mem을 초과하는 정렬의 성능을 개선함
  • 메모리 내 정렬의 성능 개선 및 메모리 소비를 감소함
  • WAL 전체 페이지 쓰기에 LZ4 및 Zstandard 압축 사용을 허용함. 이는 wal_compression 서버 파라미터에 의해 제어됨
  • macOS에서 WAL을 direct I/O를 사용하여 쓰느 것을 지원함
  • 배큠이 가장 오래된 frozen 및 multi transaction id를 설정하는데 더 공격적일 수 있게 허용함
  • 여러 외부 테이블을 참조하는 쿼리가 더 많은 경우에 외부 테이블을 병렬로 스캔할 수 있게 허용함
  • row_number(), rank(), dense_rank(), count()를 사용하는 윈도우 함수의 성능이 개선됨
  • high-core-count ARM64 시스템에서 스핀락의 성능이 개선됨

Monitoring

  • 체크포인트 및 느린 배큠 작업의 기본 로깅을 활성화함
    • log_checkpoints  기본값이 켜짐으로 변경됨
    • log_autovacuum_min_duration의 기본값이 10분으로 설정됨
  • 느린 서버 시작 동안 서버 로그에 진행 메시지를 생성함
    • 알림 간격은 새로운 서버 변수인 log_startup_progrss_interval에 의해 제어됨
  • 누적 통계 시스템 데이터를 공유 메모리에 저장함
  • VACUUM VERBOSE 및 오토배큠 로깅 메시지에 추가 정보를 추가함
  • 임시 파일 블록 I/O에 대한 EXPLAIN (BFFUERS) 출력을 추가함
  • JSON 형식의 로그 출력을 허용함
    • log_destination = jsonlog 로 설정 가능
  • pg_stat_reset_single_table_counters()를 사용하여 모든  DB에서 공유되는 테이블의 카운터를 재설정할 수 있음
  • 로컬 쉘 명령에 대한 대기 이벤트를 추가함
    • 새로운 대기 이벤트는 archive_command, archive_cleanup_command, restore_command, recovery_end_command 호출 시 사용됨

Privileges

  • 뷰에 의해 수행된 테이블 접근을 뷰의 호출자의 권한으로 제어할 수 있도록 허용함
  • pg_write_server_files의 미리 정의된 역할 내 멤버가 서버 측 기본 백업을 수행할 수 있도록 허용함
  • GRANT를 통해 개별 서버 변수 변경 권한 부여를 허용함
  • 미리 정의된 역할 pg_checkpoint를 추가하여 멤버가 CHECKPOINT를 실행할 수 있도록 함
  • pg_read_all_stats 미리 정의된 역할의 멤버가 뷰 pg_backend_memory_contexts 및 pg_shmem_allcations에 접근할 수 있도록 허용함
  • GRANT를 통해 pg_log_backend_memory_contexts()에 대한 권한 부여를 허용함

Server Configuration

  • 서버 변수인 shared_memory_size를 추가하여 할당된 공유 메모리의 크기를 보고할 수 있게 함
  • 서버 변수인 shared_memory_size_in_huge_pages를 추가하여 요구되는 거대 메모리 페이지의 수를 보고함
  • 단일 사용자 모드에서 서버 변수 shared_preload_libraries를 적용하도록 함
  • Solaris에서 dynamic_shared_memory_type의 기본 설정을 sysv로 변경함
  • postgres-C가 실행 시 계산된 값들을 정확하게 보고하도록 개선함

Streaming Replication And Recovery

  • 서버 측 기본 백업에 LZ4 및 Zstandard 압축 지원을 추가함
  • 충돌 복구 중에 checkpointer 및 bgwriter 프로세스를 실행할 수 있도록 함
  • WAL 처리 시 필요한 파일 내용의 사전 패치(prefetch)를 허용함. 이 기능은  서버 변수인 recovery_prefetch에 의해 제어됨
  • 로드 가능 모듈을 통한 아카이빙을 허용함
  • START_REPLICATION의 실행 전에 IDENTIFY_SYSTEM을 실행할 필요가 없도록 변경함

Logical Replication

  • 스키마 내 모든 테이블의 발행(publishing)을 허용함
    • CREATE PUBLICATION pub1 FOR TABLES IN SCHEMA s1, s2 등으로 가능함
  • WHERE 절을 사용하여 발행 내용을 필터링 하는 기능을 허용함
  • 특정 컬럼에 대한 발행 내용 제한을 허용함
  • ALTER SUBSCRIPTION ... SKIP 구문을 통해 구독자에서 트랜잭션 건너뛰기 기능을 허용함
  • 논리적 복제에 대한 준비된(두 단계) 트랜잭션 지원을 추가함
  • 비어있는 트랜잭션의 로지컬 복제를 방지함
  • 논리적 복제 슬롯의 디렉토리 내용을 모니터링하는 SQL 함수를 추가함
    • pg_ls_logicalsnapdir(), pg_ls_logicalmapdir(), pg_ls_replslotdir()
    • pg_monitor 역할의 멤버가 위 함수들 실행 가능함
  • 구독자가 오류 발생 시 논리적 복제 변경 적용을 중단할 수 있도록 허용함
  • 구독자 서버 변수를 발행자와 일치시켜 datetime 및 float8 값이 일관되게 해석되도록 조정함
  • 구독자 활동을 보고하는 시스템 뷰 pg_stat_subcription_stats를 추가함
  • pg_publication_tables 시스템 뷰에서 중복 항목을 억제함

Utility Commands

  • SQL MERGE 명령어 추가로 한 테이블을 다른 테이블과 일치시킬 수 있음
  • COPY 텍스트 포맷에서 HEADER 옵션 지원을 추가함
  • DB 생성을 위한 새로운 WAL-logged 방법을 추가함
  • CREATE DATABASE로 데이터베이스 OID를 설정할 수 있음
  • 윈도우 OS에서 동시 사용 중에 DROP DATABASE, DROP TABLESPACE, ALTER DATABASE SET TABLESPACE가 간헐적으로 실패하는 것을 방지함
  • 외래키 ON DEFAULT 작업이 지정된 컬럼에만 영향을 미치도록 허용함
  • ALTER TABLE로 테이블의 ACCESS METHOD 수정을 가능하게 함
  • ALTER TABLE이 테이블 재작성을 유발할 때 객체 접근 훅을 적절히 호출하도록 함
  • 로그되지 않는 시퀀스 생성을 가능하도록 함
  • 복합 타입을 반환하는 함수의 결과에 있는 개별 컬럼에 대한 종속성을 추적함

Data Types

  • numeric 값의 스케일을 음수로 설정하거나 정밀도보다 크게 설정할 수 있도록 허용함
  • 값을 interval로 캐스팅할 때 오버플로를 감지할 수 있도록 개선함
  • 비 ASCII 문자에 대한 "char" 타입의 I/O 포맷을 변경함
  • 현대 유니코드 문자(예: 오밎)의 표시 너비 정보를 업데이트 함

Functions

  • range_agg()에 대한 multirange 입력을 추가함
  • xid8 데이터 타입에 대한 MIN() 및 MAX() 집계 함수를 추가함
  • 다른 관계형 시스템과의 호환성을 위한 정규식 함수를 추가함
    • regexp_count(), regexp_instr(), regexp_like(), regexp_substr()이 추가됨
  • 다각형 간의 거리 계산 기능이 추가됨
  • of, tzh, tzm의 to_char() 포맷 코드가 추가됨
  • 시간에 AT TIME ZONE을 적용할 때, DST 적용 여부를 결정하기 위해 clock 시계 시간 대신 트랜잭션 시작 시간을 사용하도록 함
  • ts_delete() 및 setweight() 함수에서 배열 인수의 NULL 배열 요소를 무시하도록 함
  • pg_size_pretty() 및 pg_size_bytes()에 페타바이트 단위 지원을 추가함
  • pg_event_trigger_ddl_commands()가 다른 세션의 임시 스키마에 대한 참조를 실제 스키마 이름을 사용하여 출력하도록 변경함

PL/PgSQL

  • PL/pgSQL 변수의 CONSTANT 마킹 강제를 수정함

Libpq

  • 서버 인증서의 주체 대체 이름(Subject Alternative Name)에 대한 IP 주소 일치를 허용함
  • PQsslAttribute()가 libpq 연결 없이도 SSL 라이브러리 타입을 보고할 수 있도록 변경함
  • 클라이언트에 의해 보내진 쿼리 취소가 일반 클라이언트 연결과 동일한 TCP 설정을 사용하도록 변경함
  • libpq 이벤트 콜백 실패가 오류 결과를 강제하지 않도록 방지함

Client Applications

  • pgbench가 직렬화 및 데드락 실패 후 재시도를 허용하도록 함

psql

  • psql의 \copy 명령어 성능을 개선, 더 큰 덩어리(chunks)로 데이터를 전송하도록 함
  • \dconfig  명령어 추가로 서버 변수를 보고하도록 함. SHOW 명령어와 유사하지만, 여러 변수를 편리하게 보여주는 패턴 처리가 가능함
  • \getenv 명령어 추가로 환경 변수의 값을 psql 변수에 할당할 수 있도록 함
  • \lo_list 및 \dl 명령에 + 옵션 추가로 대규모 객체 권한을 표시할 수 있도록 함
  • \watch 명령에 페이저 옵션을 추가함
  • psql이 서버로 전송된 쿼리에 쿼리 내부의 이중 하이픈 주석(–)을 포함하도록 함
  • Readline의 meta-# 명령이 이중 하이픈 주석 마커(–)를 삽입하도록  psql을 조정함
  • psql이 한 번에 서버로 전송된 여러 쿼리의 몯느 결과를 출력하도록 변경함
  • --single-transaction 모드에서 에러가 감지된 후, ON_ERROR_STOP이 설정된 경우에만 최종 COMMIT 명령을 ROLLBACK으로 변경함
  • psql의 탭 완성 기능을 개선함
  • psql의 백슬래시 명령 지원을 PostgreSQL 9.2 이상 버전의 서버로 제한함

pg_dump

  • pg_dump가 public 스키마 소유권 변경과 보안 레이블을 덤프하도록 변경함
  • 많은 객체를 가진 DB의 덤프 성능을 개선함
  • 큰  TOAST 테이블을 가진 테이블에 대한 병렬 pg_dump 성능을 개선함
  • 덤프/복원 옵션인 --no-table-access-method 추가로 복원 시 기본 테이블 접근 방법만 사용하도록 강제할 수 있음
  • pg_dump 및 pg_dumpall의 지원을 PostgreSQL 9.2 이상 버전의 서버로 제한함

Server Applications

  • pg_basebackup에 --target 옵션을 추가하여 베이스백업 위치를 제어할 수 있도록함
  • pg_basebackup에서 서버 측 gzip, LZ4, Zstandard 압축 및 클라이언트 측 LZ4, Zstandard  압축을 지원함
  • pg_basebackup에서 서버 측 압축과 클라이언트 측에서의 저장 전 복원을 허용하도록 함
  • pg_basebackup의 --compress 옵션으로 압축 위치(서버 또는 클라이언트), 압축 방법 및 옵션을 제어하도록 함
  • pg_receivewal에 LZ4 압축 방식을 추가함
  • pg_receivewal의 --compress 옵션에 추가적인 기능 추가 및 적절한 WAL 위치에서 재시작 능력을 개선함
  • 데이터 디렉토리 외부에 서버 구성 파일이 저장된 경우 사용을 간소화하기 위해 pg_rewind에 --config-file 옵션을 추가함

pg_upgrade

  • pg_upgrade의 로그 및 임시 파일을 새 클러스터의 하위 디렉토리인 pg_upgrade_output.d에 저장하도록 함
  • 출력이 터미널이 아닐 경우 pg_upgrade 작업 중 기본 상태 보고를 비활성화함
  • pg_upgrade가 유효하지 않은 연결 설정을 가진 모든 DB를 보고하도록 변경함
  • pg_upgrade가 테이블스페이스 및 DB의 OID,  테이블 relfilenode 번호를 보존하도록 변경함
  • pg_upgrade에 테스트 목적으로 --no-sync 옵션을 추가함
  • pg_upgrade의 지원을 PostgreSQL 9.2 이상 버전의 오래된 서버로만 제한함

pg_waldump

  • pg_waldump 출력을 테이블 파일 노드, 블록 번호, 포크 번호 및 전체 페이지 이미지별로 필터링할 수 있도록 허용함
  • pg_waldump가 중단된(interrupted) 종료(Control+C) 전에 통계를 보고하도록 변경함
  • pg_waldump에 의해 보고된 일부 트랜잭션 WAL 레코드의 설명을 개선함
  • pg_waldump가 여러 리소스 관리자에 대한 정보를 덤프할 수 있게 허용함

Documentation

  • pg_encoding_to_char() 및 pg_char_to_encoding() 함수에 대한 문서를 추가함
  • ^@ 시작 연산자에 대한 문서를 추가함

Source Code

  • Cirrus-CI를 사용한 지속적 통합 테스팅 지원을 추가함
  • Zstandard 빌드 활성화를 위한 configure 옵션인 --with-zstd를 추가함
  • 비커뮤니티 PostgreSQL 배포판에서 다른 빌드와 호환되지 않는 라이브러리를 식별하기 위한 ABI 식별자 필드를 추가함
  • pg_type.typcategory에 "char"에 대한  새로운 값을 생성함
  • 베이스백업에 사용될 새로운 COPY 방법을 지정하는 TARGET 프로토콜 메시지를 추가함
  • COMPRESSION 및 COMPRESSION_DETAIL 프로토콜 메시지 추가로 압축 방법 및 옵션을 지정함
  • BASE_BACKUP 명령어 구문 및 베이스 백업 프로토콜에 대한 서버 지원을 제거함
  • 확장이 사용자 정의 백업 타겟을 설정할 수 있게 허용함
  • 확장이 사용자 정의 WAL 리소스 매니저를 정의할 수 있게 허용함
  • pg_settings_get_flags() 함수 추가로 서버 변수의 플래그를 가져올 수 있게 함
  • 윈도우 OS에서 서버의 모든 글로벌 변수를 PGDLLIMPORT 마커를 사용하여 내보낼 수 있음

Additional Modules

  • amcheck로 시퀀스 검사를 허용하도록 함
  • TOAST 테이블에 대한 amcheck 적합성 검사를 개선함
  • 사용자 정의 백업 타겟 예시로 basebackup_to_shell 모듈을 추가함
  • boolean 컬럼에 대한 btree_gist 인덱스를 허용함
  • 임시 파일 블록 I/O 카운터를 pg_stat_statements에 추가함
  • JIT 카운터를 pg_stat_statements 에 추가함
  • SQL 수준 출력을 제공하는 새로운 모듈 pg_walinspect를 추가함

postgres_fdw

  • postgres_fdw에서 CASE 표현식의 다운스트림 푸시를 허용함
  • 서버 변수 postgres_fdw.application_name 추가로 postgres_fdw 연결의 애플리케이션 이름을 제어할 수 있음
  • postgres_fdw 서버에서 병렬 커밋을 허용함

 

참고

728x90
반응형