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 서버에서 병렬 커밋을 허용함
참고
- PostgreSQL 15 Version doc
PostgreSQL: Documentation: 15: E.6. Release 15
728x90
반응형
'RDBMS > PostgreSQL' 카테고리의 다른 글
[PostgreSQL] 15.2 Release note 주요 내용 정리 (0) | 2024.03.27 |
---|---|
[PostgreSQL] 15.1 Release note 주요 내용 정리 (0) | 2024.03.26 |
[PostgreSQL] 14.10 Release note 주요 내용 정리 (0) | 2024.03.24 |
[PostgreSQL] 14.9 Release note 주요 내용 정리 (0) | 2024.03.23 |
[PostgreSQL] 14.8 Release note 주요 내용 정리 (0) | 2024.03.22 |