ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • PostgreSQL 12 Release
    카테고리 없음 2019. 11. 28. 17:40

    이 문서에서는 PostgreSQL 12 버전 릴리즈 노트를 정리한다.

    릴리즈 노트 정보는 https://www.postgresql.org/docs/12/release.html에서 더 자세하게 확인할 수 있다.

     

    릴리즈 노트는 메이저 기능과 마이그레이션 이슈 등의 중요한 변경사항을 포함한다.

    소수의 사용자에서만 영향을 주는 변경사항이나 내부적으로 사용자가 볼 수 없는 변경사항이 릴리즈 노트에 포함하지 않는다. 예를 들어 옵티마이저는 거의 모든 릴리즈에서  개선되었지만 일반적으로 개선된 내용은 사용자가 쿼리로 관찰한다.

     

    각 릴리즈에 대한 Git 로그를 보면 각 릴리즈에 대한 전체 변경 목록을 얻을 수 있다. pgsql-committers 이메일 목록은 모든 소스코드 변경을 기록한다. 특정 파일에 변경사항을 기록하는 웹 인터페이스가 있다.

     

    각 항목 옆에 나타나는 이름은 해당 항목의 주요 개발자를 나타낸다. 모든 변경사항에는 커뮤니티 토론 및 패치 검토가 포함되어 있어서 각 항목은 커뮤니티 성과이다.

     

    개요

    성능개선

    • B트리 인덱스의 공간활용 및 읽기/쓰기 성능 최적화
    • 수천 개의 파티션이 있는 테이블의 쿼리성능향상, INSERT 및 COPY를 통한 삽입성능향상, 쿼리 블록 없이 ALTER TABLE ATTACH PARTITION 실행하는 성능향상 등 파티션 성능 개선
    • 공통 테이블 표현식(CTE)의 자동(but overridable) 인라인
    • GIST, GIN, SP-GIST 인덱스 생성시 WAL overhead 감소
    • INCLUDE 절을 통한 GIST 인덱스 커버링 지원
    • 여러 컬럼에 공통적인 값(MCV) 통계는 CREATE STATISTICS를 통해 정의할 수 있으며, 불균일하게 분산된 여러 열을 테스트하는 쿼리에 대해 더 나은 Plan을 지원

    관리기능향상

    • REINDEX CONCURRENTLY는 테이블에 쓰기를 차단하지 않고 인덱스를 재빌드할 수 있다.
    • pg_checksums는 offline cluster에서 page checksum을 활성화/비활성화를 할 수 있다.
    • CREATE INDEX, REINDEX, CLUSTER, VACUUM FULL, pg_checksums에 대한 통계정보 향상

    SQL/JSON path 언어 지원

    generated column 저장

    Nondeterministic ICU collations, case-insensitive(대소문자를 구분하지 않는) 활성화, accent-insensitive(악센트를 구분하지 않는) 그룹핑 및 정렬

     

    새로운 인증

    • GSSAPI 인증을 사용할 경우 TCP/IP connection 암호화
    • DNS SRV를 사용해 LDAP 서버 감지
    • pg_hba.conf에 추가 인증 방법과 결합하여 clientcert=verify-full 옵션을 사용해 인증

    12 버전으로 마이그레이션

    이전 릴리즈로부터 데이터를 마이그레이션하길 원한다면 pg_dumpall를 사용한 dump/restore 또는 pg_upgrade 사용이 필요하다.

    12 버전은 이전 릴리즈와 호환성에 영향을 주는 많은 변경사항을 포함한다. 다음 비호환성 내용에 대해 확인을 한다.

    •  oid 컬럼의 특정 행동을 제거
      • 이전에 normally-invisible한 oid 컬럼은 WIHT OIDS를 사용해 테이블 생성에 지정될 수 있었다. 이는 제거되었다.
      • 컬럼은 oid 타입으로 명시적으로 선언될 수 있다.
      • WIHT OIDS를 사용해 생성된 컬럼을 가지는 테이블에 대한 연산은 수정이 필요할 것이다.
      • oid 컬럼을 숨기고 있던 시스템 카탈로그는 정상적으로 oid 컬럼을 가진다. 따라서 SELECT *는 명시적으로 선택된 경우만 컬럼을 출력할 것이다.
    • abstime, reltime, tinterval 데이터 타입을 제거
      • timestamp와 같은 SQL 표준 타입은 사용하지 않는다.
    • timetravel extension 제거
    • recovery.conf 설정을 postgresql.conf로 이동
      • recovery.conf는 더이상 사용되지 않고, recovery.conf 파일이 존재하면 서버를 시작할 수 없다.
      • recovery.signal과 standby.signal 파일이 non-primary mode로 변경하는데 사용된다.
      • trigger_file 이름은 promote_trigger_file 이름으로 변경되었다.
      • standby_mode는 삭제되었다.
    • 여러 개의 상충되는 recovery_target* 스펙을 허용하지 않는다.
    • 기본적으로 복구는 최신 타임 라인으로 진행한다.
    • 기하 함수 및 연산자에 대한 코드 리팩토링 진행
      • 이로 인해 이전 릴리즈와 비교하여 더 정확하지만 약간 다른 결과가 나올 수 있다. 특히 NaN, 언더플로, 오버플로 및 0으로 나누는 경우가 이전보다 더 일관되게 처리된다.
    • real 및 double precision 값에 새로운 알고리즘을 사용하여 성능향상 
      • 이전에는 부동소수점 값이 기본적으로 extra float_digits 값으로 조정되어 6(real에서) 또는 15(double precision에서)로 반올림되었다. 이제는 extra_float_digits이 0 이상이면 정확한 이진 값을 유지하는 데에 필요한 최소 자릿수만 출력한다. 동작은 extra_float_digits이 0이하로 설정될 때와 동일한다.
      • 또한, 부동소수점 지수의 형식은 이제 플랫폼에서 동일하다. 세 자리가 필요하지 않으면 두 자리 숫자가 사용된다. 이전 릴리즈에서 windows 빌드는 항상 세 자리를 출력했다.
    • random()과 setseed()는 across platform에서 동일하게 행동한다.
      • 특정 seed 값으로 setseed() 함수를 호출하여 생성된 random()의 sequence는 이전과 다를 수 있다. 하지만 반복 가능한데 서버 내부에서 다른 난수 사용으로 인해 이전에는 보장할 수 없었다. SQL random() 함수는 이제 세션별로 상태를 가지고 있다.
    • SQL-style substring()을 standard-compliant greediness 행동으로 변경
      • 패턴이 여러가지 방법으로 일치되는 경우, 초기 sub-pattern이 최대가 아닌 최소 텍스트 길이와 일치하는 것으로 처리된다. 예를 들어 %#"aa*#"%와 같은 패턴은 마지막 그룹이 아닌 입력에서 첫 번째 a의 그룹을 선택한다.
    • xpath() 또는 XMLTABLE의 결과는 이쁘게 출력되지 않는다.
      • 경우에 따라 이러한 함수는 nodeset 값에 공백(newline/space)를 삽입할 수도 있다. 사용법에 따라 공백은 의미적으로 중요하기 때문에 바람직하지 않다.
    • 명령행 도구 pg_verify_checksums은 pg_checksums로 이름 변경
    • pg_restore에서 덤프 내용을 표준 출력으로 보내기 위해서는 "-f -"가 필요하다.
      • 이전에는 대상이 지정되지 않으면 기본으로 발생했는데 비우호적이라고 생각되어 변경되었다.
    •  

     

     

     

     

Designed by Tistory.