E.6. 토토 17.1#

출시일: 2024-11-14

이 릴리스에는 17.0의 다양한 수정 사항이 포함되어 있습니다. 주요 릴리스 17의 새로운 기능에 대한 자세한 내용은 다음을 참조하세요.스포츠 토토 베트맨 PostgreSQL : 문서 : 17 : E.5. 릴리스 17.

E.6.1. 버전 17.1로 마이그레이션#

17.X를 실행하는 경우 덤프/복원이 필요하지 않습니다.

그러나 다른 파티션된 테이블에 대한 외래 키 참조가 있는 파티션된 테이블에서 파티션을 분리하고 이전 파티션을 삭제하지 않은 경우 아래 다섯 번째 변경 로그 항목에 자세히 설명된 대로 복구해야 할 카탈로그 및/또는 데이터 손상이 있을 수 있습니다.

또한 데이터베이스가LC_CTYPE설정은C그동안LC_COLLATE설정이 다른 로케일인 경우 아래의 여섯 번째 변경 로그 항목에 설명된 대로 텍스트 열의 색인을 다시 색인화해야 합니다.

E.6.2. 변경사항#

  • RLS가 최상위 레벨이 아닌 테이블 참조에 적용될 때 캐시된 계획이 호출 역할에 종속된 것토토 표시되는지 확인하십시오(Nathan Bossart)§

    쿼리의 CTE, 하위 쿼리, 하위 링크, 보안 호출자 보기 또는 강제 투영이 행 수준 보안 정책이 있는 테이블을 참조하는 경우 결과 계획을 실행하는 역할에 따라 잠재적으로 종속되는 것으로 표시하는 것을 무시했습니다. 이로 인해 나중에 잘못된 계획을 사용하여 동일한 세션에서 쿼리를 실행한 다음 숨겨져 있거나 대신 반환되어야 하는 행을 반환하거나 숨길 수 있습니다.

    포스트그레SQL프로젝트는 이 문제를 보고한 Wolfgang Walther에게 감사드립니다. (CVE-2024-10976)

  • 만들다libpqSSL 또는 GSS 프로토콜 협상 중에 수신된 오류 메시지 삭제(Jacob Champion)§

    암호화 협상이 완료되기 전에 수신된 오류 메시지는 실제 서버 출력이 아닌 중간자에 의해 삽입되었을 수 있습니다. 이를 보고하면 다양한 보안 위험이 발생할 수 있습니다. 예를 들어 메시지는 부주의한 사용자가 올바른 출력으로 착각할 수 있는 쿼리 결과를 스푸핑할 수 있습니다. 가장 좋은 대답은 그러한 데이터를 버리고 오직 다음에만 의존하는 것 같습니다.libpq연결 실패에 대한 자체 보고입니다.

    포스트그레SQL프로젝트는 이 문제를 보고한 Jacob Champion에게 감사드립니다. (CVE-2024-10977)

  • 사이의 의도하지 않은 상호작용 수정세션 승인 설정그리고역할 설정(톰 레인)§ §

    SQL 표준에서는 다음을 요구합니다.세션 승인 설정부작용이 있습니다역할 없음 설정. 우리의 구현에는 결함이 있어서 두 설정 간에 의도한 것보다 더 많은 상호 작용이 발생했습니다. 특히, 완료된 트랜잭션을 롤백합니다.세션 승인 설정되돌리겠습니다역할없음이전 상태가 아니더라도 이제 유효한 사용자 ID는 거래 전의 상태와 다를 수 있습니다. 일시적으로 설정세션_인증함수에서SET절도 비슷한 효과를 가졌습니다. 관련된 버그는 병렬 작업자가 검사하는 경우였습니다.현재_설정('역할'), 봤어없음다른 것을 보아야 하는 경우에도 마찬가지입니다.

    PostgreSQL프로젝트는 이 문제를 보고한 Tom Lane에게 감사드립니다. (CVE-2024-10978)

  • 신뢰할 수 있는 PL/Perl 코드가 환경 변수를 변경하지 못하도록 방지(Andrew Dunstan, Noah Misch)§ § §

    다음과 같은 프로세스 환경 변수를 조작하는 능력경로공격자에게 임의의 코드를 실행할 기회를 제공합니다. 그러므로,신뢰할 수 있는PL은 그렇게 할 수 있는 능력을 제공해서는 안 됩니다. 고치려면plperl, 교체%ENV경고와 함께 모든 수정 시도를 거부하는 연결된 해시가 있습니다. 신뢰할 수 없음plperlu환경을 바꾸는 능력을 유지합니다.

    포스트그레SQL프로젝트는 이 문제를 보고한 Coby Abrams에게 감사드립니다. (CVE-2024-10979)

  • 테이블 파티션을 연결하거나 분리할 때 외래 키 제약 조건에 대한 카탈로그 상태 업데이트 수정(Jehan-Guillaume de Rorthais, Tender Wang, Álvaro Herrera)§ §

    참조된 테이블이 분할된 경우 독립 실행형 참조 테이블과 파티션인 참조 테이블에 대해 서로 다른 카탈로그 항목이 필요합니다.파티션 연결/분리명령이 이 변환을 올바르게 수행하지 못했습니다. 특히, 이후분리이제 독립형 테이블에는 외래 키 적용 트리거가 누락되어 나중에 외래 키 제약 조건을 충족하지 못하는 행이 테이블에 포함될 수 있습니다. 후속 재첨부놀라운 오류로 인해 실패할 수도 있습니다.

    이 문제를 해결하는 방법은 다음과 같습니다.테이블 삭제 제약 조건 변경이제 독립형 테이블에 잘못된 각 제약 조건을 적용한 다음 제약 조건을 다시 추가하세요. 제약 조건을 다시 추가하는 데 실패하면 일부 잘못된 데이터가 들어온 것입니다. 참조 테이블과 참조 테이블 간의 일관성을 수동으로 다시 설정한 다음 제약 조건을 다시 추가해야 합니다.

    이 쿼리는 깨진 제약 조건을 식별하고 이를 다시 생성하는 데 필요한 명령을 구성하는 데 사용할 수 있습니다.

    SELECT conrelid::pg_catalog.regclass AS "제약된 테이블",
           AS 제약 조건 conname,
           confrelid::pg_catalog.regclass AS "참조",
           pg_catalog.format('ALTER TABLE %s DROP CONSTRAINT %I;',
                             conrelid::pg_catalog.regclass, conname) AS "drop",
           pg_catalog.format('ALTER TABLE %s ADD CONSTRAINT %I %s;',
                             conrelid::pg_catalog.regclass, conname,
                             pg_catalog.pg_get_constraintdef(oid)) AS "추가"
    pg_catalog.pg_constraint c에서
    여기서 contype = 'f' AND conparentid = 0 AND
       (pg_catalog.pg_constraint c2에서 SELECT 개수(*)
        WHERE c2.conparentid = c.oid) <
       ((pg_catalog.pg_inherits i에서 SELECT 개수(*)
        WHERE (i.inhparent = c.conrelid OR i.inhparent = c.confrelid) AND
          존재(pg_catalog.pg_partitioned_table에서 1개 선택)
                  어디에서 partrelid = i.inhparent)) +
        pg_catalog.pg_partition_root(conrelid) = confrelid인 경우의 사례
                  (pg_catalog.pg_partition_tree(confrelid)에서 개수(*) 선택
                    레벨 = 1)
             ELSE 0 END);

    다음 중 하나 이상이 가능하므로제약조건 추가단계가 실패하면 쿼리 출력을 파일에 저장한 다음 각 단계를 수행해야 합니다.

  • 다음에 대한 테스트 수정C로케일 언제LC_COLLATE다음과 다릅니다LC_CTYPE(제프 데이비스)§

    사용 시libc기본 데이터 정렬 공급자로서 다음을 확인하는 테스트C로케일이 대조에 사용 중입니다. 실수로 확인했습니다.LC_CTYPE아님LC_COLLATE. 이는 해당 설정이 동일하거나 둘 다 동일하지 않은 일반적인 경우에는 영향을 미치지 않습니다.C(별칭도 아님POSIX). 그러나 만일LC_CTYPEisC그동안LC_COLLATE다른 로캘인 경우 잘못된 쿼리 응답이 발생할 수 있으며 문자열의 인덱스가 손상될 수 있습니다. 이러한 설정이 있는 데이터베이스 사용자는 이 업데이트를 설치한 후 영향을 받는 인덱스를 다시 색인화해야 합니다. 반대의 경우LC_COLLATE존재C그동안LC_CTYPE다른 로케일로 인해 성능이 저하될 수 있지만 실제 오류는 없습니다.

  • 키 열에 대한 쿼리의 데이터 정렬이 파티션 키의 데이터 정렬과 일치하지 않는 경우 파티션별 조인 또는 그룹화를 사용하지 마십시오(Jian He, Webbo Han)§ §

    그러한 계획은 잘못된 결과를 낳을 수 있습니다.

  • 변환 후 플래너 실패 방지NULL임에 대한 테스트NULL이 아님열을 상수로거짓(리차드 구오)§

    이 버그는 일반적으로 다음과 같은 오류를 발생시킵니다.하위 계획 대상 목록에서 변수를 찾을 수 없음.

  • 인수에 특정 배열 관련 구성이 포함된 SQL 함수를 인라인하는 동안 가능한 플래너 충돌 방지(Tom Lane, Nathan Bossart)§

  • 가능한 오답을 수정하거나잘못된 varnullingrels플래너 오류:병합 ... 소스와 일치하지 않는 경우액션(딘 라시드)§ §

  • 수정 가능정렬할 경로 키 항목을 찾을 수 없습니다.a의 출력 시 오류 발생유니온 올회원 쿼리를 정렬해야 하며 정렬 열이 표현식입니다. (Andrei Lepikhov, Tom Lane)§

  • B-트리 ScalarArrayOp 인덱스 스캔의 엣지 케이스 수정(Peter Geoghegan)§

    이러한 계획을 가진 스크롤 가능한 커서가 시작점토토 백업된 후 다시 앞토토 실행될 때 잘못된 답변이 가능했습니다.

  • 어설션 실패 또는 혼란스러운 오류 메시지 수정복사(질의) 에 ..., 때질의a에 의해 다시 작성됨대신 알림을 보내세요규칙(텐더 왕, 톰 레인)§

  • 다음 유효성 검사 수정복사FORCE_NOT_NULL그리고FORCE_NULL옵션(조엘 제이콥슨)§

    일부 잘못된 사용법은 이제 거부되어야 합니다.

  • 다음 경우 서버 충돌 수정json_objectagg()호출에 휘발성 함수가 포함되어 있습니다(Amit Langote)§

  • 병렬 해시 조인 중 왜곡된 데이터 감지 수정(Thomas Munro)§

    하나의 파티션에 너무 많은 튜플이 축적되었기 때문에 해시 조인의 내부를 다시 파티션한 후, 우리는 모든 파티션의 튜플이 동일한 하위 파티션에 들어갔는지 확인합니다. 이는 모두 동일한 해시 값을 가지며 더 이상 재파티션해도 문제가 개선될 수 없음을 의미합니다. 이 검사는 어떤 경우에는 오작동하여 반복적인 쓸데없는 재분할을 허용하여 결국 리소스 고갈 오류로 끝날 수 있습니다.

  • 다음의 경우 충돌을 피하세요.데이터베이스 세트 변경는 다음과 같은 검색 경로 기반 조회가 필요한 서버 매개변수를 설정하는 데 사용됩니다.default_text_search_config(제프 데이비스)§

  • 파티션을 나눈 테이블에 새 인덱스를 생성하는 동안 opclasses 및 collation의 반복 조회 방지(Tom Lane)§

    이것은 주로 일부 조회가 제한된 방식토토 수행되기 때문에 문제가 되었습니다.검색_경로, 다음과 같은 경우 예기치 않은 오류가 발생합니다.색인 생성명령이 외부 개체를 참조함pg_catalog.

    이 수정은 또한 상위 파티션 인덱스에 대한 설명이 하위 인덱스에 복사되는 것을 방지합니다.

  • 파티션된 테이블에서 누락된 종속성을 다음에 지정된 내장되지 않은 액세스 방법에 추가합니다.테이블 생성 ... 다음을 사용하여(마이클 파퀴에)§

    액세스 방법에 의존하는 테이블이 존재할 때 액세스 방법 삭제를 차단해야 하지만 그렇지 않아 후속 이상한 동작이 허용됩니다. 이 수정 사항은 이 업데이트 이후에 생성된 파티션을 나눈 테이블의 문제만 방지한다는 점에 유의하세요.

  • ASCII 문자가 아닌 문자를 포함하는 로케일 이름을 허용하지 않습니다(Thomas Munro)§

    이러한 로케일 이름은 다른 곳에서는 사용되지 않으므로 이는 Windows에서만 발생하는 문제입니다. 이러한 이름이 어떤 인코딩토토 표시되는지가 매우 불분명하기 때문에 문제가 있습니다(로케일 자체가 사용할 인코딩을 정의하므로). 최근PostgreSQL토토에서는 이에 대한 혼란으로 인해 Windows 런타임 라이브러리가 중단될 수 있습니다.

    새 오류 메시지가 나타나는 사람은 누구나 Windows Locale Builder를 사용하여 ASCII 전용 이름으로 새로운 중복된 로케일을 생성하거나 다음과 같은 BCP 47 호환 로케일 이름을 사용하는 것을 고려해야 합니다.tr-TR.

  • 직렬화 가능한 트랜잭션 커밋 시 경쟁 조건 수정(Heikki Linnakangas)§

    최근 커밋된 트랜잭션을 잘못 처리하면 어설션 실패 또는 a거래 상태에 접근할 수 없습니다.오류.

  • 경합 상태 수정커밋 준비됨고아가 발생한 2PC 파일(wuchengwen)§

    동시거래 준비원인이 될 수 있습니다커밋 준비됨완료된 트랜잭션에 대한 디스크상의 2단계 상태 파일을 제거하지 않습니다. 즉각적인 악영향은 없었지만 후속 충돌 및 복구가 실패할 수 있습니다.거래 상태에 접근할 수 없습니다., 서비스를 복원하려면 분리된 파일을 수동으로 제거해야 합니다.

  • 동안 잘못된 토스트 인덱스를 건너뛴 후 잘못된 메모리 액세스를 방지진공 가득 참(텐더 왕)§

    아직 재구축되지 않은 인덱스를 추적하는 목록이 이 코드 경로에서 제대로 업데이트되지 않아 나중에 어설션 실패 또는 충돌 위험이 있습니다.

  • 다음 방법을 수정하세요.제자리에카탈로그 업데이트가 손실될 수 있습니다(Noah Misch)§ § § § § § §

    일반 행 업데이트는 트랜잭션의 롤백 기능을 보존하기 위해 행의 새 버전을 작성합니다. 그러나 특정 시스템 카탈로그 업데이트는 의도적토토 비트랜잭션이며 행의 내부 업데이트를 통해 수행됩니다. 이러한 패치는 내부 업데이트의 효과가 손실될 수 있는 경합 상태를 수정합니다. 예를 들어, 설정한 것을 잊어버릴 수도 있습니다.pg_class.relhasindextrue로 설정하면 새 색인의 업데이트가 방지되어 색인이 손상됩니다.

  • 복구 종료 시 카탈로그 캐시 재설정(Noah Misch)§

    이것은 카탈로그 캐시의 오래된 데이터 사용토토 인해 내부 카탈로그 업데이트가 손실될 수 있는 시나리오를 방지합니다.

  • 인터럽트를 보류하는 동안 병렬 쿼리 사용을 피하십시오(Francesco Degrassi, Noah Misch, Tom Lane)§ §

    이 상황은 일반적으로 발생할 수 없지만 B-트리 지원으로 SQL 언어 기능을 사용하는 등의 테스트 시나리오를 통해 도달할 수 있습니다(프로덕션 사용에 비해 너무 느림). 만약 그런 일이 발생했다면 무기한 대기하게 될 것입니다.

  • 아직 정의되지 않은 포털 무시pg_cursors보기 (톰 레인)§

    새 커서가 설정되는 동안 이 뷰를 검사하는 사용자 정의 코드가 호출될 수 있으며, 그런 일이 발생하면 널 포인터 역참조가 발생합니다. 불완전하게 설정된 커서를 제외하도록 뷰를 정의하여 문제를 방지하세요.

  • 피하세요논리적 디코딩 중 예기치 않은 table_index_fetch_tuple 호출열 기본값 삽입과 관련된 트랜잭션을 디코딩하는 동안 오류가 발생했습니다(Takeshi Ideriha, Hou Zhijie)§ §

  • 논리적 디코딩의 메모리 소비 감소 (사와다 마사히코)§

    논리적 복제 중에 수신된 튜플 데이터를 저장하려면 더 작은 기본 블록 크기를 사용하십시오. 이는 장기 실행 트랜잭션을 처리하는 동안 심각한 것토토 보고되어 메모리 부족 오류로 이어지는 것토토 보고된 메모리 낭비를 줄입니다.

  • a에서 호출된 안정적인 함수의 동작 수정전화문의 인수 목록,전화PL/pgSQL 내에 있음예외블록 (톰 레인)§

    이전 분기별 릴리스의 유사한 수정과 마찬가지로 이 경우 이러한 함수에 잘못된 스냅샷이 전달되어 외부 트랜잭션 시작 이후 수정된 행의 오래된 값을 볼 수 있었습니다.

  • 파싱libpq연결 유지다른 정수값 옵션과 동일한 방식토토 연결 옵션 (Yuto Sasaki)§

    여기에 사용된 코딩은 다른 경우와 달리 옵션 값의 후행 공백을 거부했습니다. 이는 문제가 있는 것토토 밝혀졌습니다.ecpg28174_28198

  • ecpglib, 잘못된 날짜/시간 입력을 구문 분석할 때 범위를 벗어난 읽기 문제 수정(Bruce Momjian, Pavel Nekrasov)§

    상수 배열이 시작되기 직전에 위치를 읽는 것이 가능했습니다. 하지만 실제 결과는 미미해 보입니다.

  • 수정psql의 9.4 이전 서버에서 다시 작동하는 명령을 설명합니다(Tom Lane)§

    ACL(권한) 열 표시와 관련된 명령이 매우 오래되어 실패했습니다.PostgreSQL서버, 해당 버전에 없는 기능 사용토토 인해 발생합니다.

  • 1ms 미만의 간격이 지정된 경우 정지를 방지psql's\watch명령(안드레이 보로딘, 마이클 파퀴어)§

    대신, 이것을 0의 간격(실행 사이에 대기 없음)과 동일하게 취급하십시오.

  • 복제 비밀번호 찾기 실패 수정~/.pgpass(톰 레인)§

    pg_basebackup그리고pg_receivewal다음 항목과 일치하지 못했습니다.~/.pgpass그것은복제데이터베이스 이름 필드(아니면)-d또는--dbname스위치가 제공되었습니다. 이로 인해 비밀번호를 묻는 예기치 않은 메시지가 표시되었습니다.

  • pg_combinebackup, 전체 백업을 포함해야 하는 디렉토리에 증분 백업 파일이 있는 경우 오류 발생(Robert Haas)§

  • pg_combinebackup, 이중 슬래시가 포함된 파일 이름을 구성하지 마십시오(Robert Haas)§

    이로 인해 기능적 문제는 발생하지 않았지만 오류 메시지에 중복된 슬래시가 표시되어 혼란을 야기할 수 있었습니다.

  • 임시 테이블과 색인을 다시 색인화하려는 시도를 피하십시오.vacuumdb그리고 동시에reindexdb(VaibhaveS, Michael Paquier, Fujii Masao, Nathan Bossart)§ § §

    다른 세션의 임시 테이블 재인덱싱은 작동하지 않지만 일부 코드 경로에서 건너뛰기 확인이 누락되어 원치 않는 오류가 발생했습니다.

  • ARM64 플랫폼에서 잘못된 LLVM 생성 코드 수정(Thomas Munro, Anthonin Bonnefoy)§

    ARM 플랫폼에서 JIT 컴파일을 사용할 때 생성된 코드는 32비트를 초과하는 재배치 거리를 지원할 수 없으므로 생성된 코드를 잘못 배치하면 대용량 메모리 시스템에서 서버 충돌이 발생할 수 있습니다.

  • 프로세스 시작 시간(으로 표시됨)을 가정한 몇 가지 장소를 수정합니다.time_t)은 a에 적합합니다.값 (맥스 존슨, 네이선 보사트)§

    플랫폼에서는 32비트(특히 Windows)이므로 Y2038 이후에는 이 코딩이 실패합니다. 대부분의 실패는 외관상토토만 나타나지만 특히pg_ctl 시작멈추게 됩니다.

  • 다음으로 시간대 데이터 파일 업데이트tzdata2024b 출시(톰 레인)§ §

    이것tzdata릴리스는 기존 System-V 호환 영역 이름을 변경하여 해당 지리적 영역을 복제합니다. 예를 들어PST8PDT이제 다음의 별칭입니다.미국/Los_Angeles. 가장 눈에 띄는 결과는 표준화된 시간대가 도입되기 전 타임스탬프의 경우 해당 시간대가 해당 위치의 현지 평균 태양시를 나타내는 것토토 간주된다는 것입니다. 예를 들어,PST8PDT, timestamptz다음과 같은 입력1801-01-01 00:00이전에는 다음과 같이 렌더링되었을 것입니다.1801-01-01 00:00:00-08, 하지만 이제는 다음과 같이 렌더링됩니다.1801-01-01 00:00:00-07:52:58.

    또한 멕시코, 몽골, 포르투갈에 대한 역사적 수정이 이루어졌습니다. 특히,아시아/초이발산이제 다음의 별칭입니다.아시아/울란바토르별도의 영역이 아닌 주로 해당 영역 간의 차이가 신뢰할 수 없는 데이터를 기반토토 한 것토토 밝혀졌기 때문입니다.

수정 사항 제출

문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.