PostgreSQL 9.5.4 문서 | |||
---|---|---|---|
이전 | 위로 | 부록 E. 출시 소식 | 다음 |
출시일: 2016-08-11
이번 릴리즈에는 9.5.3 버전 출시 이후 발견된 다양한 개선 사항들이 포함되었다. 9.5 메이저 릴리즈에 포함된 새 기능들의 자세한 내용은 E.5절에서 다룬다.
9.5.X 버전에서는 덤프/복원 작업을 할 필요는 없다.
하지만, 9.5.2 이전 버전을 사용하고 있다면, E.3절 소개를 먼저 읽어 보아야 한다.
중첩된 CASE-WHEN 구문에서 처리가 잘못될 가능성을 수정함 Fix possible mis-evaluation of (Heikki Linnakangas, Michael Paquier, Tom Lane)
CASE 구문 안에 또 다른 CASE 구문이 사용되고, 그 검사 값이 null 이거나 null 이 아닌지를 판단하는 부분에서 오동작을 할 가능성이 있었다. 또한 인라인 SQL 함수안에서 CASE 구문이 사용될 경우도 마찬가지였다. 심지어 검사하는 값의 자료형이 다를 경우는 서버가 비정상적으로 종료될 가능성도 있었으며, 이 경우 의도되지 않은 서버 메모리 접근이 가능할 수도 있었다. (CVE-2016-5423)
데이터베이스 이름과 롤 이름에 있는 특수 문자에 대한 클라이언트 처리 방법을 수정함 (Noah Misch, Nathan Bossart, Michael Paquier)
vacuumdb나 기타 클라이언트 프로그램에서 사용하는 데이터베이스 이름 또는 롤 이름에 있는 큰 따옴표 문자나, 역슬래시 문자에 대한 처리를 보다 엄격하게 처리하도록 수정했다. 또한, 이런 프로그램에서 사용하는 conninfo 문자열에서 그 이름들이 엄격하게 사용되도록 수정했다.
psql의 \connect, \password 내장 명령어의 인자로 사용하는 각 이름에서 큰 따옴표가 사용될 경우 반드시 그 쌍이 맞는지 확인한다.
psql의 \connect 내장 명령어의 옵션으로 -reuse-previous 옵션이 새로 추가 되었다. 이 옵션은 이전 연결을 시도 할 때, 어떠한 연결 정보를 다시 지정하지 않고 연결 할 수 있도록 한다. 이 옵션으로 pg_dumpall 명령에 의해 생성된 스크립트에서 데이터베이스 이름으로 특수 문자가 있는 경우 보안 취약성 부분을 보완할 수 있다.
pg_dumpall에서 데이터베이스 이름이나, 롤 이름 안에 줄바꿈 문자가 포함된 경우 작업을 중지한다. 이런 이름이 윈도우즈에서는 가능하나 비실용적이다. 앞으로는 서버 측에서 이런 이름을 사용할 수 없도록 할 예정이지만, 이 버전에서는 반영하지 않았다.
이 처리는 pg_dumpall 명령으로 생성된 스크립트나, 기타 관리용 작업 스크립트들은 일반적으로 슈퍼유저 권한으로 실행되는데, 이 실행 과정 중 악의적인 쿼리가 실행될 가능성 있어 보안 취약성 문제로 분류하고 수정되었다. (CVE-2016-5424)
중첩된 복합 값들이 있을 경우, IS NULL/IS NOT NULL 계산에서 일부 오동작 하던 부분을 수정함 (Andrew Gierth, Tom Lane)
SQL 표준 규약에 따르면, 로우의 모든 값이 null 이면, IS NULL 연산은 true를 반환한다. (즉, ROW(NULL,NULL) IS NULL 인 경우 true로 처리한다. 하지만, 제귀적인 사용인 경우는 상황이 다르다. ROW(NULL, ROW(NULL,NULL)) IS NULL 인 경우는 false로 처리한다.) 쿼리 실행기는 이 처리가 바르게 되었지만, 실행 계획기에서 이 부분에 대한 처리가 바르지 않았으며, contrib/postgres_fdw 확장 모듈의 원격 쿼리에서도 같은 오류가 있어 수정 되었다.
재귀 호출을 하는 CTE (WITH 구문으로 만들어지는 뷰)를 사용하는 INSERT ... ON CONFLICT 구문에서 "unrecognized node type" 오류가 발생했던 부분을 수정함. (Peter Geoghegan)
INSERT ... ON CONFLICT 구문 분석시 인덱스 사용 처리 부분에 오류를 수정함 (Tom Lane)
INSERT ... ON CONFLICT 구문을 사용하는 테이블에 exclude 제약조건이 있는 경우 그 인덱스 사용에 문제가 있었던 부분을 수정함 (Tom Lane)
이 경우 제약조건 위한 오류가 발생해야 하는데, 무한 루프로 빠지는 경우가 있었다.
대상 테이블에 OID에 대한 유니크 인덱스가 있는 경우 INSERT ... ON CONFLICT 구문에서 오류가 있었던 부분 수정 (Tom Lane)
inet, cidr 자료형에서 IPv6 주소에 대한 너무 많은 콜론 구분자 필드를 거부함 (Tom Lane)
close_ps()
함수의 입력 인자로 NaN 값이 사용되는 경우
오동작 막음
(point ## lseg 연산자에서 사용됨)
(Tom Lane)
이 경우 NULL을 반환함
pg_get_expr()
함수에서 비 정상 인자가 사용되는
부분 수정
(Michael Paquier, Thomas Munro)
to_number()
함수에서 1바이트 버퍼 중복 읽기 문제
수정
(Peter Eisentraut)
to_number()
함수는 입력 문자열보다 더 많은 문자를
읽을 가능성이 있다. 이 경우 인접 메모리를 잘못 접근해서
서버가 중지될 가능성이 있었다.
CREATE MATERIALIZED VIEW 또는 CREATE TABLE AS 구문에서 WITH NO DATA 옵션이 있는 경우, 그 구문에서 사용하는 쿼리에 대해서 실행 계획기가 작동하지 않도록 함 (Michael Paquier, Tom Lane)
이 정책은 불필요한 오류를 피하기 위함이다. 아직 만들어지지 않은 테이블을 사용하는 구체화된 뷰를 호출하는 stable 함수가 대표적인 예다.
heap_update()
작업 도중 안전하지 못한
중간 상태를 피함
(Masahiko Sawada, Andres Freund)
이전 버전에서는 대상 튜플의 XMAX 변경을 위해, 그 튜플을 잠궜지만, WAL에서는 그 작업이 없었다. 이 문제로, 자료 변경이 완료되기 전, 서버가 중지되는 경우 자료 손실이 발생할 가능성이 있었다.
로우 잠금 작업을 WAL replay 시 갱신용 bit 힌트를 수정함 (Andres Freund)
이 문제는 prepared 구문에 의한 로우 잠금이고, 커밋 되지 않았고, 그 트랜잭션은 서버 재 시작시 무시 되어야 하는 상황에서 발생했다.
격리 수준이 serializable 인 경우 FOR KEY SHARE 로우 잠금을 취득하려고 할 때, 불필요한 "could not serialize access" 오류를 피함 (Álvaro Herrera)
Make sure "expanded" datums returned by a plan node are read-only (Tom Lane)
This avoids failures in some cases where the result of a lower plan node is referenced in multiple places in upper nodes. So far as core PostgreSQL is concerned, only array values returned by PL/pgSQL functions are at risk; but extensions might use expanded datums for other things.
Avoid crash in postgres -C when the specified variable has a null string value (Michael Paquier)
Prevent unintended waits for the receiver in WAL sender processes (Kyotaro Horiguchi)
Fix possible loss of large subtransactions in logical decoding (Petru-Florin Mihancea)
Fix failure of logical decoding when a subtransaction contains no actual changes (Marko Tiikkaja, Andrew Gierth)
Ensure that backends see up-to-date statistics for shared catalogs (Tom Lane)
The statistics collector failed to update the statistics file for shared catalogs after a request from a regular backend. This problem was partially masked because the autovacuum launcher regularly makes requests that did cause such updates; however, it became obvious with autovacuum disabled.
Avoid redundant writes of the statistics files when multiple backends request updates close together (Tom Lane, Tomas Vondra)
Avoid consuming a transaction ID during VACUUM (Alexander Korotkov)
Some cases in VACUUM unnecessarily caused an XID to be assigned to the current transaction. Normally this is negligible, but if one is up against the XID wraparound limit, consuming more XIDs during anti-wraparound vacuums is a very bad thing.
Prevent possible failure when vacuuming multixact IDs in an installation that has been pg_upgrade'd from pre-9.3 (Andrew Gierth, Álvaro Herrera)
The usual symptom of this bug is errors like "MultiXactId NNN has not been created yet -- apparent wraparound".
When a manual ANALYZE specifies a column list, don't reset the table's changes_since_analyze counter (Tom Lane)
If we're only analyzing some columns, we should not prevent routine auto-analyze from happening for the other columns.
Fix ANALYZE's overestimation of n_distinct for a unique or nearly-unique column with many null entries (Tom Lane)
The nulls could get counted as though they were themselves distinct values, leading to serious planner misestimates in some types of queries.
Prevent autovacuum from starting multiple workers for the same shared catalog (Álvaro Herrera)
Normally this isn't much of a problem because the vacuum doesn't take long anyway; but in the case of a severely bloated catalog, it could result in all but one worker uselessly waiting instead of doing useful work on other tables.
Fix bug in b-tree mark/restore processing (Kevin Grittner)
This error could lead to incorrect join results or assertion failures in a merge join whose inner source node is a b-tree indexscan.
Avoid duplicate buffer lock release when abandoning a b-tree index page deletion attempt (Tom Lane)
This mistake prevented VACUUM from completing in some cases involving corrupt b-tree indexes.
Fix building of large (bigger than shared_buffers) hash indexes (Tom Lane)
The code path used for large indexes contained a bug causing incorrect hash values to be inserted into the index, so that subsequent index searches always failed, except for tuples inserted into the index after the initial build.
Prevent infinite loop in GiST index build for geometric columns containing NaN component values (Tom Lane)
Fix possible crash during a nearest-neighbor (ORDER BY distance) indexscan on a contrib/btree_gist index on an interval column (Peter Geoghegan)
Fix "PANIC: failed to add BRIN tuple" error when attempting to update a BRIN index entry (Álvaro Herrera)
Fix possible crash during background worker shutdown (Dmitry Ivanov)
Fix PL/pgSQL's handling of the INTO clause within IMPORT FOREIGN SCHEMA commands (Tom Lane)
Fix contrib/btree_gin to handle the smallest possible bigint value correctly (Peter Eisentraut)
Teach libpq to correctly decode server version from future servers (Peter Eisentraut)
It's planned to switch to two-part instead of three-part server
version numbers for releases after 9.6. Make sure
that PQserverVersion()
returns the correct value for
such cases.
Fix ecpg's code for unsigned long long array elements (Michael Meskes)
In pg_dump with both -c and -C options, avoid emitting an unwanted CREATE SCHEMA public command (David Johnston, Tom Lane)
Improve handling of SIGTERM/control-C in parallel pg_dump and pg_restore (Tom Lane)
Make sure that the worker processes will exit promptly, and also arrange to send query-cancel requests to the connected backends, in case they are doing something long-running such as a CREATE INDEX.
Fix error reporting in parallel pg_dump and pg_restore (Tom Lane)
Previously, errors reported by pg_dump or pg_restore worker processes might never make it to the user's console, because the messages went through the master process, and there were various deadlock scenarios that would prevent the master process from passing on the messages. Instead, just print everything to stderr. In some cases this will result in duplicate messages (for instance, if all the workers report a server shutdown), but that seems better than no message.
Ensure that parallel pg_dump or pg_restore on Windows will shut down properly after an error (Kyotaro Horiguchi)
Previously, it would report the error, but then just sit until manually stopped by the user.
Make parallel pg_dump fail cleanly when run against a standby server (Magnus Hagander)
This usage is not supported unless --no-synchronized-snapshots is specified, but the error was not handled very well.
Make pg_dump behave better when built without zlib support (Kyotaro Horiguchi)
It didn't work right for parallel dumps, and emitted some rather pointless warnings in other cases.
Make pg_basebackup accept -Z 0 as specifying no compression (Fujii Masao)
Fix makefiles' rule for building AIX shared libraries to be safe for parallel make (Noah Misch)
Fix TAP tests and MSVC scripts to work when build directory's path name contains spaces (Michael Paquier, Kyotaro Horiguchi)
Be more predictable about reporting "statement timeout" versus "lock timeout" (Tom Lane)
On heavily loaded machines, the regression tests sometimes failed due to reporting "lock timeout" even though the statement timeout should have occurred first.
Make regression tests safe for Danish and Welsh locales (Jeff Janes, Tom Lane)
Change some test data that triggered the unusual sorting rules of these locales.
Update our copy of the timezone code to match IANA's tzcode release 2016c (Tom Lane)
This is needed to cope with anticipated future changes in the time zone data files. It also fixes some corner-case bugs in coping with unusual time zones.
Update time zone data files to tzdata release 2016f for DST law changes in Kemerovo and Novosibirsk, plus historical corrections for Azerbaijan, Belarus, and Morocco.