출시 날짜 :2023-11-09
이 릴리스에는 16.0의 다양한 수정 사항이 포함되어 있습니다. Major Release 16의 새로운 기능에 대한 정보는 참조사설 토토 베이 PostgreSQL : 문서 : 16 : E.9. 릴리스 16.
16.x.를 실행하는 사람들에게는 덤프/복원이 필요하지 않습니다.
그러나 특정 유형의 인덱스가 잘못된 검색 결과를 얻거나 불필요하게 비효율적 일 수있는 몇 가지 실수가 발견되었습니다. 권장됩니다.Reindex
이 업데이트를 설치 한 후 잠재적토토 베이 영향을받는 인덱스. 아래 네 번째부터 일곱 번째 Changelog 항목을 참조하십시오.
알려지지 않은 유형의 인수 처리 수정별도의
"Any"
집계 함수 (Tom Lane)§
이 오류가 A로 이어졌습니다.텍스트
-유형 값은알 수없는
7294_7419텍스트
value.
thePostgreSQL이 문제를보고 한 Jingzhou Fu 프로젝트. (CVE-2023-5868)
새로운 배열 치수를 계산하는 동안 정수 오버플로 감지 (Tom Lane)§
현재 배열 경계 외부에있는 배열 위트 스크립트에 새 요소를 할당 할 때, 감지되지 않은 정수 오버플로가 가장자리 케이스에서 발생할 수 있습니다. 임의의 코드 실행에 잠재적토토 베이 악용 될 수있는 메모리 스톰프가 가능하며 서버 메모리의 공개도 가능합니다.
PostgreSQL프로젝트이 문제를보고 한 Pedro Gallegos에게 감사드립니다. (CVE-2023-5869)
방지pg_signal_backend
신호 배경 근로자 및 오토바 쿠움 프로세스의 역할 (Noah Misch, Jelte Fennema-Nio)§ §
문서에pg_signal_backend
SuperUser 소유 프로세스에 신호를 발행 할 수 없습니다. 그러나 이러한 배경 프로세스는 0의 역할 OID를 광고하기 때문에 신호를 보낼 수있었습니다. 이를 슈퍼 서서 소유권을 나타내는 것토토 베이 취급하십시오. 이러한 프로세스 유형 중 하나를 취소하는 보안의 영향은 핵심 코드가 진행되는 한 상당히 작습니다 (우리는 다른 코드를 시작할 것입니다). 그러나 확장자는 더 취약한 백그라운드 작업자를 추가 할 수 있습니다..
또한is_superuser
매개 변수는 이러한 프로세스에서 올바르게 설정됩니다. 그 감독에 대해 구체적인 보안 결과는 알려져 있지 않지만 일부 확장에는 중요 할 수 있습니다.
thePostgreSQL프로젝트 감사합니다 Hemanth Sandrana와 Mahendrakar Srinivasarao는이 문제를보고했습니다. (CVE-2023-5870)
GIST Index 빌드에서 재귀 페이지 분할 중 오작동 수정 (Heikki Linnakangas)§
페이지 다운 링크의 위치가 잘못 추적 된 사례를 수정하고 잘못된 일을 조용히 수행하지 않고 그러한 상황에서 복구 할 수 있도록 일부 논리를 소개합니다. 이 오류로 인해 후속 인덱스 검색토토 베이 인해 잘못된 답변이 발생할 수 있습니다. 이 업데이트를 설치 한 후 모든 GIST 인덱스를 다시 표시하는 것이 좋습니다.
BTREE 인덱스 항목의 복제 방지간격
열 (Noah Misch)§
간격
구별 가능하지만 동일하게 비교하는 값24:00:00
and1 일
. 이것은 btree de-duplication의 가정을 깨뜨립니다.간격
열은 제거에서 제외되어야합니다. 이 감독은 인덱스 전용 스캔으로 인해 잘못된 결과를 초래할 수 있습니다. 또한 업데이트 후Amcheck거의 모든 인덱스에 대한 오류를보고합니다. 사용자는 BTREE 색인을 다시 시작해야합니다.간격
열
프로세스날짜
브린에서 더 탁월한 값dateTime_minmax_multi_ops
Indexes (Tomas Vondra)§
날짜에 대한 거리 계산은 뒤쪽으로 거꾸로되었으므로 병합 항목에 대한 결정이 좋지 않습니다. 색인은 여전히 올바른 결과를 생성하지만 그보다 훨씬 덜 효율적입니다. 구매 브린minmax_multi
인덱스 on날짜
열은 권장됩니다.
프로세스 큰타임 스탬프
andTimestamptz
브린에서 더 탁월한 값dateTime_minmax_multi_ops
Indexes (Tomas Vondra)§ §
무한대는 실수로 다른 값과는 거리가 멀지 않고 거리가 0이 아닌 거리가없는 것으로 취급되어 어떤 항목이 병합 할 항목에 대한 결정이 좋지 않습니다. 또한 유한하지만 매우 대단한 값 (대표적인 타임 스탬프 범위의 종점 근처)은 내부 오버플로를 초래할 수있어 다시 불량한 결정을 내릴 수 있습니다. 색인은 여전히 올바른 결과를 생성하지만 그보다 훨씬 덜 효율적입니다. 구매 브린minmax_multi
인덱스 ON타임 스탬프
andTimesTamptz
열에 무한 또는 큰 유한 값이 포함되거나 포함 된 경우 열이 권장됩니다.
브린에서 계산 오버 플로우를 피하십시오interval_minmax_multi_ops
극도의 간격 값이있는 인덱스 (Tomas vondra)§
이 버그는 그러한 인덱스에 큰 간격 값을 삽입하려고하면서 예기치 않은 실패를 일으킬 수 있습니다.
다중 파티션 키 (David Rowley)를 갖춘 해시 파티셔닝 테이블에 대한 파티션 단계 생성 및 런타임 파티션 정리 수정§ §
일부 경우is null
파티션 키 중 하나의 조건토토 베이 인해 충돌이 발생할 수 있습니다.
동안 동시에 업데이트 된 행의 일관성없는 재발을 고정병합
(Dean Rasheed)§
inCommitted 읽기
모드, 동시 트랜잭션토토 베이 대상 행이 업데이트되었음을 발견 한 업데이트는 쿼리의 재확인입니다.여기서
업데이트 된 행의 조건.병합
이 회전하는 동안 다른 결합 된 테이블의 적절한 행이 사용되었는지 확인하지 못했기 때문에 새로 업데이트 된 행이 다시 업데이트되어야하는지에 대한 잘못된 결정이 발생할 수 있습니다.병합
.
상속 된 대상 테이블을 정확하게 식별업데이트
/삭제
/병합
부모 테이블이 제약 조건 (Amit Langote, Tom Lane)에 의해 제외되는 경우에도§ § §
초기에 이름 지정된 표가 제약토토 베이 제외되지만 모든 상속 자손이 제약토토 베이 제외되면 최초의 비 배정 된 후손은 기본 목표 테이블로 식별되었습니다. 이로 인해 초기에 명명 된 테이블이 아닌 해당 테이블과 관련된 발사 명세서 수준 트리거가 발생합니다. v16에서는 같은 감독이로 이어질 수 있습니다.“rte in rte in rte in allid perminfoindex 0”오류.
scalararrayopexpr 조항 (Peter Geoghegan)의 Btree Mark/복원 처리에서 가장자리 케이스 수정 (Peter Geoghegan)§
indexscan을 이전에 표시된 위치로 복원 할 때, 스캔이 ScalarArrayopexpr의 일치 끝까지 정확히 발전 한 경우 코드는 필요한 설정 단계를 놓칠 수 있습니다 (즉,indexcol = any (array [])
) 조항. 이로 인해 가져와야 할 일부 행이 누락 될 수 있습니다.
Memoize Execution (Orlov Aleksej, David Rowley)에서 쿼리 내 메모리 누출 수정§
설정 회전 함수가 0 행 (Tom Lane)을 반복적토토 베이 반환 할 때 쿼리 내 메모리 누출 수정§
충돌하지 마십시오cursor_to_xmlschema ()
비 데이터 리턴 포털 (Boyu Yang)에 적용됩니다.§
연속적인 원산지 필터 조건의 부적절한 공유 수정pg_logical_slot_get_changes ()
Call (Hou Zhijie)§
이 함수의 한 호출에 의해 설정된 원점 조건은 원점 인수를 지정하지 않은 나중에 호출에 의해 재사용됩니다. 이것은 의도되지 않았습니다.
의도 한 오류를 던지면pgrowlocks ()
파티션 된 테이블 (David Rowley)에 적용됩니다.§
이전에, 포인트가 아닌 불만“힙 만 지원됩니다”올라갈 것입니다.
다양한 SQL 기능 (Noah Misch)에서 유효하지 않은 인덱스를보다 깨끗하게 처리합니다.§
오류를보고하는 경우pgstatIndex ()
, pgstatginindex ()
, pgstathashIndex ()
또는pgstattuple ()
는 유효하지 않은 인덱스에 적용됩니다. 만약에brin_desummarize_range ()
, brin_summarize_new_values ()
, brin_summarize_range ()
또는gin_clean_pending_list ()
유효하지 않은 인덱스에 적용되며 디버그 레벨 메시지를보고하는 것 외에는 아무것도하지 않습니다. 이전에 이러한 기능은 지수를 처리하려고 시도했으며 실패한 것에 따라 이상한 방식토토 베이 실패 할 수 있습니다색인 생성
뒤에 남겨졌습니다.
긴 입력토토 베이 조기 메모리 할당을 피하십시오to_tsvector ()
(Tom Lane)§
건설물의 과도한 할당 수정TSVECTOR
intsvectorRecv ()
(Denis Erokhin)§
들어오는 벡터에 위치 데이터가 포함 된 경우 완성 된 됨의 이진 수신 함수 왼쪽 낭비 공간 (완성 된 데이터의 크기와 거의 같음)TSVECTOR
. 극단적 인 경우 이것은로 이어질 수 있습니다.“최대 총 Lexeme 길이 초과”방출시 길이 한계 아래에있는 벡터의 실패. 어쨌든 그것은 공간에서 낭비되는 공간토토 베이 이어질 수 있습니다.
손상된 PGLZ 압축 데이터 (Flavien Guedez)에 대한 점검 개선§
수정구독 변경
그래서 명령이 변경되도록run_as_owner
옵션이 실제로 적용되었습니다 (Hou Zhijie)§
분할 된 테이블에 벌크 테이블 삽입 수정 (Andres Freund)§
파티션에서 삽입 상태를 부적절하게 공유하면COPY from
, 일반적토토 베이“파일 xxxx에서 블록 NNNN을 읽을 수 없음 : 8192 바이트의 0의 0 만 읽기”오류.
inCOPY
, Command (Laurenz Albe)에 필요하지 않은 열 기본값 평가를 피하십시오.§
기본값이 열에 실제로 유효하지 않거나 기본값의 표현식이 현재 실행 컨텍스트에서 실패한 경우 가능한 오류를 피합니다. 예를 들어 덤프를 복원하는 동안 이러한 에지 케이스가 발생합니다. 이 상황에서는 이전 릴리스가 실패하지 않았으므로 V16이 그렇게하지 못하게합니다.
inCOPY From
, 지원되지 않는 인코딩 변환이 필요할 때 깨끗하게 실패합니다 (Tom Lane)§
최근 리팩토링이 실수로 의도 된 오류 확인을 제거하여 끝났습니다.“캐시 조회 기능에 실패 0”유용한 오류 메시지 대신
충돌을 피하십시오설명
매개 변수가 표시 될 예정인 경우설명
NULL 부팅 시간 값이 있습니다 (Xing Guo, Aleksander Alekseev, Tom Lane)§
내장 매개 변수는이 설명에 적합하지만 확장자는 그러한 매개 변수를 정의 할 수 있습니다.
떨어지는 동안 스냅 샷이 있는지 확인on Commit Drop
Temp Tables (Tom Lane)§
이것은 임시 테이블의 카탈로그 항목에 토스트가 필요할 정도로 넓은 필드를 가지고 있다면 (예 : 매우 복잡한).check
조건).
방금 포장 된 아동 프로세스에서 셧다운 신호에 대한 부적절한 응답을 피하십시오System ()
(Nathan Bossart)§
이 수정 사항은 아동 과정이 포기한 인종 조건을 피합니다.System ()
그러나 아직 의도 된 아동 프로그램을 실행하지는 않았지만 부모 서버 프로세스를위한 신호를 받고 행동 할 수 있습니다. 그것은 중복 청소 작업이 수행되는 것으로 이어질 것입니다.
찢어진 읽기에 대처PG_CONTROL
프론트 엔드 프로그램 (Thomas Munro)§
일부 파일 시스템에서 읽기PG_CONTROL
서버가 동시에 해당 파일을 쓸 때 원자 조치가 아닐 수도 있습니다. 이것은 나쁜 CRC를 통해 감지 할 수 있습니다. 오류를보고하기 전에 파일이 유효 해지는 지 확인하기 위해 몇 번 다시 시도하십시오.
찢어진 읽기를 피하십시오PG_CONTROL
관련 SQL 기능 (Thomas Munro)§
읽기 전에 적절한 잠금을 획득PG_CONTROL
, 해당 파일의 일관된보기를 얻기 위해.
수정“정렬 할 PathKey 항목을 찾을 수 없습니다”집계 함수를 계획하는 동안 발생하는 오류주문
또는별도의
옵션 (David Rowley)§
백엔드 활동 크기를 계산할 때 정수 오버플로를 피하십시오. 스트링 어레이 (Jakub Wartak)§
64 비트 기계에서 값을 허용합니다track_activity_query_size
허용 된 연결 수를 곱하면 32 비트 오버플로를 유발할만큼 충분히 큽니다. 실제로 백 커드당 로컬 어레이를 할당하는 코드는 이것에 대해 부주의하고 배열을 잘못 할당했습니다.
|분석
상속 테이블 (Heikki Linnakangas)§
블록 레벨 카운터는 현재 관계 필드를 업데이트 할 때 동시에 0으로 재설정해야합니다.
배경 작성자를 수정하여 WAL을보고하여 통계 카운터 (Nazir Bilal Yavuz)§
강제 플러시 행동에 대한 혼란 수정pgstat_report_wal ()
(Ryoga Yoshida, Michael Paquier)§
이로 인해 셧다운에서 Wal I/O가 잊혀진 통계가 발생할 수 있습니다.
임시 테이블 확장의 통계 추적 수정 (Karina Litskevich, Andres Freund)§
이들은 Temp-Table Writes로 계산되어야 할 때 정상적인 테이블 쓰기로 계산되었습니다.
언제track_io_timing
가 활성화되어 있습니다. 관계 확장 작업에 의한 시간을 쓰기 시간 (Nazir Bilal Yavuz)토토 베이 포함시킵니다.§
캐시의 종속성 추적Call
진술, 필요할 때 다시 계획 (Tom Lane)§
DDL 명령, 예 :call
인수, A를 다시 계획해야 할 필요성을 창출 할 수 있습니다.Call
PL/PGSQL에 의해 캐시되었습니다. 그것은 일어나지 않았으며, 오작동 또는와 같은 이상한 오류로 이어졌습니다.“캐시 조회 실패”.
OpenSSL Connection Setup (Sergey Shinderuk)에서 오류 후 Pfree-a-Null-Pointer 충돌을 피하십시오§
검사 할 때 둥지 깊이를 올바르게 추적레코드
-유형의 외부 쿼리 레벨 (Richard Guo)§
이 감독은 주장 실패, 핵심 덤프 또는로 이어질 수 있습니다.“Bogus Varno”오류.
ScalarArrayopexpr 노드 (David Rowley)의 트랙 해시 기능 및 부정 기능 종속성 (David Rowley)§
대부분의 경우이 감독은 무해했습니다.이 기능은 노드의 원래 연산자가 남아있는 동안 사라질 가능성이 없기 때문입니다.
오류 처리 버그 수정레코드
타입 캐시 관리 (Thomas Munro)§
잘못된 지점에서 발생하는 메모리 외 오류는 무한 루프로 이어질 수없는 상태를 남길 수 있습니다.
WAL (Michael Paquier)을 읽는 동안 메모리 외 실패를 치명적토토 베이 취급합니다§
이전에 이것은 가짜 데이터 조건토토 베이 취급 될 것이며, 우리가 WAL의 종말에 도달했다는 결론토토 베이 이어질 것입니다.
가짜 WAL 레코드 길이 필드 (Thomas Munro, Michael Paquier)를 기반으로 메모리를 할당하려는 시도로 인한 복구 실패 수정§ §
고정“핸들을 복제 할 수 없음”Windows에서 발생하는 오류min_dynamic_shared_memory
| 0 위 (Thomas Munro) 위로 설정되었습니다.§
운영 순서 수정에서genericxlogfinish
(Jeff Davis)§
이 코드는 변경된 버퍼를 표시하기 전에 WAL을 작성하여 충돌 안전에 필요한 조건을 위반했습니다. 핵심 코드는이 기능을 사용하지 않지만 확장자는 다음과 같습니다 (Contrib/Bloom
예를 들어).
PL/Python 예외 처리 (Alexander Lakhin)에서 잘못된 주장 제거§
수정pg_dump새로운 덤프run_as_owner
구독 옵션 (Philip Warner)§
이 감독토토 베이 인해 구독은 항상 |run_as_owner
설정거짓
, V16 Pre-V16 릴리스에서의 행동과 동일하지 않습니다.
수정PG_RESTORE선택적 복원이 선택된 테이블 (Euler Taveira, Tom Lane)에 대한 테이블 레벨 및 열 레벨 ACL을 모두 포함하도록합니다.§
이전에는 두 유형이 모두 존재하면 테이블 레벨 ACL 만 복원됩니다.
논리 추가pg_upgrade사용 확인Abstime
, Reltime
및TinterVal
데이터 유형 (Álvaro Herrera)§
이러한 쓸모없는 데이터 유형이 제거되었습니다PostgreSQL버전 12, 따라서 업그레이드 될 수 있다고 주장하기 전에 이전 데이터베이스에 존재하지 않는지 확인하십시오.
거짓을 피하십시오“너무 많은 클라이언트 연결”오류PGBENCHWindows (Noah Misch)§
수정VACUUMDB의 다중 처리-n
스위치 (Nathan Bossart, Kuwamura Masaki)§
다중-n
스위치는 여러 스키마에서 테이블을 제외해야하지만 실제로 생성 된 쿼리의 구성이 결함토토 베이 인해 아무것도 제외되지 않았습니다.
수정VACUUMDB그 명예-버퍼 사용-리미트
분석 전용 모드의 옵션 (Ryoga Yoshida, David Rowley)§
inContrib/Amcheck
, 중단 된 페이지 삭제를 부패로보고하지 마십시오 (Noah Misch)§
이 수정은의 거짓 양성 보고서를 방지합니다.“가장 왼쪽 대상 페이지의 첫 번째 자녀는 레벨의 가장 남은 것이 아닙니다”, “Block Nnnn이 가장 남지 않았습니다”또는“index xxxx의 왼쪽 링크/오른쪽 링크 쌍”. 그들은 나타났습니다Amcheck미완성 된 BTREE 인덱스 페이지 삭제 및 이전 이후에 실행되었습니다진공
물건을 청소했습니다.
실패 수정contrib/btree_gin
인덱스 ON간격
컬럼, indexscan을 사용하는 경우<
또는<=
운영자가 수행됩니다 (Dean Rasheed)§
그러한 인덱스 스캔은 모든 항목을 반환하지 못했습니다.
최근의 모듬 된 빌드 타임 경고 억제MacOS(Tom Lane)§ §
Xcode 15(Macos Sonoma) 구축 중에 많은 중복-서식 경고를 일으키는 방식토토 베이 링커의 동작을 변경했습니다PostgreSQL. 이것들은 무해했지만 성가 시므로 같은 라이브러리를 두 번 인용하지 마십시오. 또한 사용 제거-multiply_defined suppress
링커 스위치는 오랫동안 No-OP였으며 현재는 적극적토토 베이 불만을 제기했습니다.
빌딩시Contrib/Unaccent
의 규칙 파일, 사용토토 베이 돌아 가기Python
if-with-python
가 제공되지 않았고 변수를 만들지 않았습니다Python
설정되지 않았다 (Japin Li)§
제거Phot
(피닉스 아일랜드 시간) 기본 타임 존 약어 목록 (Tom Lane).§
기본 목록 에이 약어가 있으면 더 이상 기본 TZDB 항목을 기본적토토 베이 설치하지 않기 때문에 최근 데비안 및 우분투 릴리스에서 실패 할 수 있습니다. 이것은 총 인구가 약 24 명인 구역의 약어이기 때문에 누구나 그것을 놓치지 않을 것 같습니다. 누군가가 그렇다면 사용자 정의 약어 파일을 통해 다시 넣을 수 있습니다.
문서에 올바른 것이 없다면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면