PostgreSQL 9.6.2 문서 | |||
---|---|---|---|
이전 | 위로 | 부록 E. 출시 소식 | 다음 |
출시일: 2016-03-31
이번 릴리즈에는 9.5.1 버전 출시 이후 발견된 다양한 개선 사항들이 포함되었다. 9.5 메이저 릴리즈에 포함된 새 기능들의 자세한 내용은 E.10절에서 다룬다.
9.5.X 버전에서는 덤프/복원 작업을 할 필요는 없다.
하지만, 업그레이드 작업 뒤 몇몇 인덱스의 REINDEX 작업이 필요할 수도 있다. 아래 첫번째 항목에서 다룬다.
로케일이 C가 아닌 경우 문자열 정렬을 위한 간결해진 키 사용을 막음 (Robert Haas)
PostgreSQL 9.5 버전에서는 문자열 비교할 때,
strcoll()
함수에서 사용할 문자열을
strxfrm()
함수로 간결해진 키를 만들어
성능을 대폭 개선했다. 그런데, 대부분의 glibc (리눅스에서
사용하는 C 라이브러리) strxfrm()
함수가 몇몇 로케일 환경에서
해당 로케일에 맞는 문자열 처리를 strcoll()
함수와
다르게 판단하는 버그가 발견되었다. glibc의 이 문제점이 해결 되기 전까지는
로케일이 C가 아닌 상황에서는 최적화 작업을 하지 않기로 결정했다.
(C 로케일 환경에서는 strcoll()
,
strxfrm()
두 함수 모두 안전하다.)
(여기서 말하는 로케일은 LC_COLLATE 를 말한다. 해당 데이터베이스의 LC_COLLATE
값이 C인 경우는 이 문제가 없다. - 옮긴이)
운 나쁘게도 이 문제는 문자열 정렬 뿐 아니라, 문자 자료형(text, varchar, char) 칼럼에 대한 B트리 인덱스에도 영향을 끼쳐 인덱스가 잘못 만들어졌을 수도 있다. 9.5.0 또는 9.5.1 버전에서 만들어졌거나 수정된 인덱스가 있다면, 그 인덱스의 REINDEX 작업이 꼭 필요하다.
문제가 있는 로케일이 어떤게 있는지 아직 모두 파악되지는 못했다. 일단 C 로케일과, en_US 같은 영어 기반 로케일은 안전하나, de_DE 같은 영어 아닌 많이 쓰는 로케일도 다 대부분의 glibc 버전에서 일단 이 부분에 문제가 있을 수 있다.
캐시 실행 계획에서 로우 보안 상태를 바르게 관리하도록 고침 (Stephen Frost)
하나 이상의 롤로 쿼리를 구성한 한 세션에서, 실행 계획 캐시 사용할 때 다른 롤 ID로 만들어진 실행 계획을 잘못 재사용하는 문제가 생길 수 있었다. 이렇게 되면, 로우 수준 보안 row-level security (RLS) 기능을 사용할 경우, 잘못된 권한이 부여 될 수 있었다. (CVE-2016-2193)
contrib/pageinspect 모듈에 추가된 새 함수들 가운데 몇몇은 슈퍼유저 권한으로만 실행되게 수정함 (Andreas Seltenreich)
pageinspect 확장 모듈에 포함된 대부분의 함수는
bytea 값을 살펴보는 것으로 슈퍼유저가 아니면
접근이 불가능하지만, brin_page_type()
,
brin_metapage_info()
함수는 그렇지 않아 수정했다.
이런 함수들이
서버가 비정상 종료시키거나, 서버 메모리를 훔쳐 볼 가능성도 있었다.
악의적 사용을 막기위해 빠진 접근 권한도 추가 했다.
(CVE-2016-3065)
인덱스를 사용하는 ROW() 잘못된 비교 처리 수정 (Simon Riggs)
9.5 기능 가운데 작은 개선 사항으로 ROW() 함수를 사용할 때 인덱스를 사용할 수 있도록 했는데, 이 기능이 인덱스의 복잡한 환경 (예를 들어, 하나는 ASC 이고, DESC 인 칼럼이 쓰이는 인덱스인 경우)에서 의도하지 않게 작동했다. 더 나은 해결 방법이 나올 때까지 이 기능은 삭제했다.
인덱스를 사용하는 ROW() 잘못된 NULL 항목 비교 처리 수정 (Tom Lane)
ROW(a, b) > ROW('x', 'y') 형태의 로우 비교 작업에서 인덱스를 사용하는데, b 칼럼에 값이 NULL인 경우 잘못된 처리를 하고 있었다. a 칼럼 값에 따른 NULL 아닌 b 값이 반드시 있는 경우만 고려하도록 수정했다.
fsync()
함수 호출 전후 발생할 가능성이 있는
자료 손실을 막음 (Michael Paquier,
Tomas Vondra, Andres Freund)
SELECT FOR UPDATE/SHARE 쿼리에서 굳이 잠글 필요가 없는 테이블이 있는 경우, 그 한 로우의 다시 확인하는 방식이 잘못되어 고쳤음 (Tom Lane)
Rows from non-locked relations were incorrectly treated as containing all NULLs during the recheck, which could result in incorrectly deciding that the updated row no longer passes the WHERE condition, or in incorrectly outputting NULLs.
입력 인자값으로 그것의 하위 객체가 이름을 사용하고 있는데,
그 이름이 출력 칼럼의 이름으로 사용하고자 할 때
json_to_record()
함수가 정상적으로 작동하도록
고침
(Tom Lane)
두개의 빈 배열을 인자로 하는 jsonb_object()
함수
반환값을 바르게 수정함
(Michael Paquier, Andrew Dunstan)
배열 서브스크립트를 사용해서
경로 배열 요소를 정수로 변환할 때
jsonb_set()
함수가 잘못 작동 하든 것 고쳤음.
(Michael Paquier)
to_char()
함수에서 OF
예약어를 이용해서 지역 시간대 값을 표시하는데,
그 값이 음수인 경우 바르게 출력하도록 수정함
(Thomas Munro, Tom Lane)
INSERT ... ON CONFLICT 명령에서 대기 종료 로그 처리가 잘못될 수 있는 부분 고쳤음 (Peter Geoghegan)
해당 제약 조건이 없음에도 불구하고 제약조건 제외 처리 때문에, 대기가 발생했다는 로그가 가끔 찍혔다.
복구 작업이 대기 상태로 빠지기 전까지 recovery_min_apply_delay 설정을 무시하도록 고침 Ignore recovery_min_apply_delay parameter until (Michael Paquier)
Previously, standby servers would delay application of WAL records in response to recovery_min_apply_delay even while replaying the initial portion of WAL needed to make their database state valid. Since the standby is useless until it's reached a consistent database state, this was deemed unhelpful.
서버 시작할 때 XID 겹침 현상에 대한 pg_subtrans 처리를 바르게 고침 (Jeff Janes)
논리적 디코딩에 있던 다양한 문제점 고침 (Andres Freund)
Trouble cases included tuples larger than one page when replica identity is FULL, UPDATEs that change a primary key within a transaction large enough to be spooled to disk, incorrect reports of "subxact logged without previous toplevel record", and incorrect reporting of a transaction's commit time.
outer 뷰에서 바른 서브쿼리를 포함하는 WHERE 절이 있을 때 인근 보안이 취약한 뷰에 대한 실행계획기의 오류를 고침 (Dean Rasheed) (커밋 번호 41fedc246 임, 직접 소스를 보고 확인 해야 할듯 - 옮긴이)
GIN 인덱스 검색에서 메모리 누수 고침 (Tom Lane)
localeconv()
작업에서 발생할 수 있는
이미 정리한 출력 문자열 처리를 다시 정리하면서 서버가
비정상 종료되는 흔하지 않는 문제점 고침
(Tom Lane)
ispell 사전의 affix 파일 구문 분석 고침 (Tom Lane)
터키 UTF8 로케일에서 I 처리처럼, affix 파일 구문 분석에 오류가 있었음.
ispell 사전 파일 구문 분석에서
sscanf()
함수 사용 안하도록 함
(Artur Zakirov)
이 문제는 FreeBSD 파생 OS(OS X 포함)에서 오동작해서 고쳤음
PPC를 사용하는 IBM xlc 컴파일러에서 atomic-operation 코드를 수정함 (Noah Misch)
This error led to rare failures of concurrent operations on that platform.
AVX2-capable CPU를 쓰는 Windows7SP1/2008R2SP1 이전 버전의 윈도우즈에서 비주얼 스튜디오 2013으로 빌드된 서버가 비정상 종료되던 문제를 해결 함 (Christian Ullrich)
This is a workaround for a bug in Visual Studio 2013's runtime library, which Microsoft have stated they will not fix in that version.
psql 탭 키 자동완성 기능에서 멀티바이트 객체 이름 처리 개선 (Kyotaro Horiguchi, Robert Haas)
psql 탭 자동완성에서 SECURITY LABEL 처리 고침 (Tom Lane)
SECURITY LABEL 다음에 탭 키가 오면, psql 프로그램이 갑자기 종료되거나, 의도하지 않는 예약어를 보여 준 부분을 고쳤음.
pg_ctl 명령에서 명령행 옵션으로 제한 시간을 지정하지 않았을 경우 PGCTLTIMEOUT 환경 변수를 사용할 수 있도록 함. (Noah Misch)
This eases testing of slower buildfarm members by allowing them to globally specify a longer-than-normal timeout for postmaster startup and shutdown.
윈도우즈용 pg_ctl에서 윈도우즈 서비스 상태를 바르게 확인 하도록 고침 (Manuel Mathar)
The previous set of minor releases attempted to fix pg_ctl to properly determine whether to send log messages to Window's Event Log, but got the test backwards.
pgbench 에서 -C 옵션과 -M prepared 옵션이 함께 쓰일 경우 그 처리를 바르게 하도록 고침 (Tom Lane)
pg_upgrade에서 새 데이터 디렉터리가 옛 데이터 디렉터리 안에 있는 경우 삭제 스크립트를 안 만듦 (Bruce Momjian)
이 스크립트가 새 데이터 디렉터리까지 삭제할 가능성 있음
PL/Perl에서 Postgres 빈 배열을 Perl 빈 배열을 전환 됨 (Alex Hunsaker)
Python 식별자가 아닌 이름으로 함수 이름을 사용해서 PL/Python 코드를 바꿈 (Jim Nasby)
contrib/pgstattuple 모듈의
pgstatindex()
함수의 통계 처리 고침
(Tom Lane)
MSVC 빌드에서 psed 의존성을 없앰, 코어 Perl에서 더이상 이것을 제공하지 않음 (Michael Paquier, Andrew Dunstan)
2016c tzdata 파일 적용. 일광시간법 변경: 아제르바이잔, 칠레, 아이티, 팔레스타인, 러시아 (알타이, 아스트라한, 키로프, 사할린, 울리야놉스크 지방), 또한 리투아니아, 몰도바, 러시아 (칼리닌그라드, 삼마라, 볼고그라드) 역사적인 부분도 수정.