PostgreSQL 9.5.4 문서 | |||
---|---|---|---|
이전 | 위로 | 부록 E. 출시 소식 | 다음 |
발표일: 2016-01-07
PostgreSQL 9.5 주요 개선 사항:
INSERT 작업 중 제약조건 충돌이 일어났을 때 UPDATE 작업으로 바꾸거나, 해당 작업을 무시할 수 있는 기능 추가
GROUP BY 절에서 분석 기능인 GROUPING SETS, CUBE, ROLLUP 구문 추가
로우수준 권한 제어 추가
논리 복제 중 개별 변경 사항의 원본을 식별하기 위한 방법을 포함하는 복제 진행 과정을 추적할 수 있는 기법 추가
블록 범위 색인 Block Range Indexes (BRIN) 추가
상당한 정렬 성능 개선
멀티 코어 환경에서 상당한 성능 개선
위 내용은 아래 각 단락에서 보다 자세히 소개한다.
메이져 버전 업그레이드를 하려면, pg_dumpall 명령을 이용한 덤프/복원 작업하거나, pg_upgrade 명령을 이용해야 한다.
9.5 버전은 이전 버전과의 호환성에 영향을 주는 여러 변경 사항을 포함 하고 있다. 다음은 이전 버전과 비교해서 바뀐 부분이나, 없어진 것이나, 새로 추가된 것들을 다루고 있어, 업그레이드를 할 때 주의해야 할 부분이다.
연산자 우선순위를 표준 SQL 기준으로 변경 했다. (Tom Lane)
<=, >=, <> 연산자가 <, >, = 연산자와 같은 우선 순위로 조정 되었다. IS 검사 (예, x IS NULL) 앞 여섯 연산자보다 우선순위가 낮아졌다. 또한, NOT 연산자로 시작하는 다중 예약어 연산자들은 이제 그 기본 연산자의 우순순위로 처리된다. (예, NOT BETWEEN 연산의 우선순위는 BETWEEN 연산과 같다.) NOT 연산자 경우, 이전 버전까지 어떤 경우는 그 왼쪽 연산이 우선인 경우도 있었고, 이번 버전처럼 오른쪽 연산이 우선인 경우도 있어, 우선순위의 일관성이 없었다. 이번 버전에 operator_precedence_warning 환경 설정 매개변수가 추가 되었다. 이 변수값을 on으로 해 두면, 이전 버전과 달라진 연산자 우선 순위로 처리되는 경우 경고를 보여주어 의도되지 않은 결과를 확인해 볼 필요가 있음을 쉽게 알 수 있게 했다.
pg_ctl 명령의 서버 중지 모드의 기본값이 smart에서 fast로 바뀌었다. (Bruce Momjian)
이것은 접속해 있는 세션들이 스스로 접속을 종료할 때까지 기다리는 것이 아니라, 세션들의 접속을 서버가 끊어버리고 종료하는 것이 기본값임을 의미한다.
PL/pgSQL 변수값 할당에서 자료형 변환을 하려면, 문자에서 해당 자료형으로 변환하지 말고, 자동 형변환 기능으로 할당하라. (Tom Lane)
불린 자료형이 문자열 자료형으로 형변환 될 때, t 또는 f가 아니라, 이제는 true 또는 false로 변환된다. 다른 자료형의 형변환인 경우 이전보다 많이 성공한다. 예를 들어, 정수형 변수에 3.9 숫자를 할당하면, 오류를 내지 않고, 4를 할당한다. 특정 소스나 자료형 선언에 대해 형 변환 할당 등급이 없으면, PL/pgSQL에서는 예전 입출력 형변환 작동방식을 따른다.
서버 명령행 옵션에서 역슬래시 이스케이스 문자를 사용할 수 있음 (Andres Freund)
이전 버전까지는 이 옵션에서 공백문자를 사용하면, 옵션이 분리 되어 버려 한 옵션의 설정값 안에 공백문자를 포함할 방법이 없었다. 이제부터는 역슬래시 문자를 포함하려면, \\ 형태로 사용해야 한다.
GSSAPI 인증 설정과 관련된 include_realm 설정의 기본값이 1로 변경 되었다. 이에 따라 기본 설정으로는 GSS 또는 SSPI 1순위 이름에서 realm 설정을 생략할 수 없다. (Stephen Frost)
checkpoint_segments 환경 설정 매개 변수가 min_wal_size, max_wal_size 두 변수로 바뀜 (Heikki Linnakangas)
기존 checkpoint_segments 설정값과 같은 값으로 설정하려면, 다음과 같은 식으로 계산한다:
max_wal_size = (3 * checkpoint_segments) * 16MB
checkpoint_segments 기본값을 사용하고 있었다면, max_wal_size 기본값이 이 계산식 결과보다 충분히 큰 값이 때문에, 굳이 새로 지정할 필요는 없다.
리눅스 OOM 킬러와 관련된 설정을 PG_OOM_ADJUST_FILE, PG_OOM_ADJUST_VALUE 운영체제 환경 변수 설정으로 제어할 수 있다. 이전 버전에서는 LINUX_OOM_SCORE_ADJ, LINUX_OOM_ADJ 빌드 옵션으로 컴파일 했었다. (Gurjeet Singh)
이전 버전부터 사용되지 않던 ssl_renegotiation_limit 환경 설정 매개 변수가 삭제되었다. (Andres Freund)
SSL 협상 절차는 이론상 좋은 개념이지만, 네트워크 환경이 좋지 않은 실세계에서는 많은 보안상 문제점을 안고 있었다. 그래서, SSL 표준안에서도 이제 이 절차를 뺄려고 하고 있다. PostgreSQL 에서도 이제는 더 이 설정에 대한 처리를 하지 않는다. 아직 환경 설정 매개 변수로는 있지만, 그 값을 0 (사용 안함) 아닌 다른 값으로 변경할 수는 없다. 이제 이 부분에 대한 문서화도 하지 않는다.
서버 환경 설정 매개 변수로 autocommit 설정이 빠졌다. 이미 이전부터 사용하지 않았다. ((Tom Lane)
pg_authid 테이블의 rolcatupdate 칼럼이 사용하지 않아 빠졌다. (Adam Brightwell)
pg_stat_replication 시스템 뷰의 sent 칼럼 값이 의미 있는 값으로 저장되지 않으며, 0이 아니라 null 값으로 저장된다. (Magnus Hagander)
json, jsonb 자료형 안에서 사용되는 배열의 요소 추출 지정자로 음수를 쓸 수 있다. 음수면 배열 끝에서부터 계산 된다. (Peter Geoghegan, Andrew Dunstan)
이전 버전에서는 음수를 사용하면, NULL 반환 했다.
다음에서 이전 메이져 버전과 PostgreSQL 9.5 버전에서 달라진 점을 소개한다.
블록 범위 인덱스 Block Range Indexes (BRIN) (Álvaro Herrera)
BRIN 인덱스는 힙 블럭의 범위에 대한 요약 정보 (최소값, 최대값 같은 것)만 보관한다. 이렇게 해서 인덱스 크기가 아주 적고, 자료 변경 작업을 아주 가볍게 할 수 있으며, 게다가 자료가 자연스럽게 클러스터 형태가 된다면 (로그와 같이 누적 자료형태) 그 검색 속도도 상당히 빠르다.
GiST 인덱스를 사용하는 닫힌 객체(다각형, 원)에 대한 정확한 거리 계산 기능 쿼리로 가능해졌다. (Alexander Korotkov, Heikki Linnakangas)
이전 버전까지는 이 작업을 하려면, 먼저 그 객체 거리 기준으로 정렬해서 가장 큰 값을 로우를 구하는 서브 쿼리를 사용하고, 그 결과를 기준으로 보다 정확한 거리 계산 작업을 다시 했어야 했다.
GiST 인덱스도 이제 인덱스 단독 검색이 가능하다. (Anastasia Lubennikova, Heikki Linnakangas, Andreas Karlsson)
GIN 인덱스트의 펜딩 목록 크기를 조정하는 gin_pending_list_limit 환경 설정 매개 변수가 추가 되었다. (Fujii Masao)
이 설정은 인덱스별로 개별 설정도 가능하다. 이전 버전까지는 이 값을 work_mem 기준으로 계산 되었는데, 이 값이 work_mem 크게 잡은 경우 메모리 낭비가 심했다.
서버가 비정상적으로 종료될 경우, hash 인덱스를 만들고 있었다면, 이것은 안전하지 않기 때문에, 경고를 보여주도록 했다. (Bruce Momjian)
"간결해진" 키로 varchar, text, numeric 자료형 칼럼에 대한 정렬 속도가 향상되었다. (Peter Geoghegan, Andrew Gierth, Robert Haas)
인라인으로도 정렬을 할 수도록 내부 구조를 확장해서, SQL 차원의 비교 함수를 사용할 수 없는 CREATE INDEX, REINDEX, CLUSTER 명령에서 성능이 좋아졌다. (Peter Geoghegan)
해시 조인 성능 향상 (Tomas Vondra, Robert Haas)
공유 버퍼 내용 바꾸기 작업에 대한 동시성 향상 (Robert Haas, Amit Kapila, Andres Freund)
인덱스 검색에서 페이지 잠금, 핀(pin) 수를 줄였다. (Kevin Grittner)
이 개선은 인덱스 청소 작업시 잠김 빈도가 줄었다는 것이 가장 큰 이점이다.
각 백엔드마다 버퍼 핀(pin)을 감시해서 메모리 효율성을 높임 (Andres Freund)
잠금 확장성을 높임 (Andres Freund)
특히 CPU 소켓이 여러개 있을 경우 이 확장성이 유연하지 못했던 부분을 개선했다.
쿼리 최적화 작업에서 의미 없는 left-join 서브 쿼리인 경우 그것을 뺀다. (David Rowley)
적절한 위치에서 윈도우 함수를 사용하는 서브 쿼리로 쿼리 엄격성을 낮춤 (David Rowley)
칼럼 보안 뷰를 사용하는 쿼리에서 어떤 함수가 그 보안 칼럼을 참조 하지 않는다면, 그 함수를 실행 할 수 있음 (Dean Rasheed)
WHERE 절에서 검색용 함수를 쓸 때, 그 함수가 불린형 반환 함수라면 해당 인덱스 사용에 있어 통계 정보를 이용하도록 수정 (Tom Lane)
해당 칼럼의 자료형에 대응하는 함수가 없어도 ANALYZE 명령으로 기본 통계정보 (null 빈도와 칼럼 평균 넓이) 를 계산함 (Oleksandr Shulgin)
CRC (cyclic redundancy check) 속도 개선, CRC-32C 로 변경 (Abhijit Menon-Sen, Heikki Linnakangas)
비트맵 인덱스 스캔 성능 개선 (Teodor Sigaev, Tom Lane)
필요 없는 메모리 복제를 최소화 해서 CREATE INDEX 작업 속도 향상 (Robert Haas)
파티션 맵핑 버퍼 수 늘림 (Amit Kapila, Andres Freund, Robert Haas)
대용량 과부하 서버에서 성능 개선
log_autovacuum_min_duration 설정을 개별 테이블 단위로도 지정 할 수 있음 (Michael Paquier)
cluster_name 환경 설정 매개 변수가 추가됨 (Thomas Munro)
이 문자열은 postgresql.conf 파일에서 지정하고, 이 값은 클러스터 식별자로 사용된다. 또한 서버 프로세스 이름에 포함되어, 어떤 프로세스가 어느 클러스터에 속한 것인지를 쉽게 파악하게 해 준다.
접속 시작시 log_disconnections 설정값을 일반 사용자가 바꿀 수 없게 함 (Fujii Masao)
SSL 서버 인증서에, "Subject Alternative Name"이 있다면, 그것을 확인함 (Alexey Klyukin)
이 값이 있다면, 인증서 "Common Name" 대신에 이 이름으로 검사함
pg_stat_ssl 시스템 뷰가 추가 되었다. 이 뷰는 SSL 연결 정보를 제공한다. (Magnus Hagander)
구현 독립적인 SSL 정보를 반환하는 libpq 함수 추가 (Heikki Linnakangas)
OpenSSL 함수를 호출 하기 위해서,
PQgetssl()
함수를
여전히 사용할 수 있지만, 이 함수는 더 이상 사용하지 않을 계획이다.
libpq에서는 SSL을 구현한 여러
라이브러리들도 사용할 수 있도록 하는 것이 목표이기 때문이다.
SSL 구현 독립적인 방법으로
SSL 정보를 사용할 수 있는 새 함수인
PQsslAttribute()
, PQsslAttributeNames()
,
PQsslInUse()
함수들을
사용하는 것이 바람직 하다.
libpq 에서 어떤 OpenSSL 스레드 콜백 함수도 사용할 수 있음 (Jan Urbanski)
이전 버전에서는 자체 구현 했었음
checkpoint_segments 설정이 min_wal_size, max_wal_size 설정으로 바뀜 (Heikki Linnakangas)
이 설정은 더 이상 쓰지 않는 WAL 파일들에 대해서 얼마나 남겨 놓을 것인가를 보다 유연하게 할 수 있다. 먼저 max_wal_size 기본값이 1GB로 기존 checkpoint_segments 기본값 보다 훨씬 크게 설정했다. 또, 대기 서버의 재시작 위치가 max_wal_size 범위 안에 있도록 주의를 해야한다. 이전 버전의 checkpoint_segments 설정은 이 부분에 대한 고려가 없었다.
리눅스 OOM 킬러 작동에 대한 설정을 PG_OOM_ADJUST_FILE, PG_OOM_ADJUST_VALUE 운영체제 환경 설정값으로 지정하도록 변경했다. (Gurjeet Singh)
이전 버전에서는 OOM 관련 설정은 엔진 컴파일 시점에 LINUX_OOM_SCORE_ADJ, LINUX_OOM_ADJ 명령행 옵션을 사용했다. 이제 이 옵션은 더 이상 지원하지 않는다.
트랜잭션 커밋 시간을 추적할 수 있는 track_commit_timestamp 환경 설정 매개 변수가 추가되었다. (Álvaro Herrera, Petr Jelínek)
pg_xact_commit_timestamp()
,
pg_last_committed_xact()
함수로 이 값을 살펴 볼 수 있다.
ALTER ROLE SET 명령에서 local_preload_libraries 설정을 지정할 수 있음 (Peter Eisentraut, Kyotaro Horiguchi)
autovacuum workers 설정값 변경할 때 서버 재실행 하지 않아도 됨 (Michael Paquier)
debug_assertions 설정을 읽기 전용으로 바꿈 (Andres Freund)
컴파일 시점에 이 값을 켰다면, 코드 최적화를 위해 더 이상 변경 할 수 없게 했다. 따라서 postgres -A 옵션이 빠졌다.
effective_io_concurrency 설정이 서버에 아무런 영향을 주지 않도록 변경 되었음 (Peter Eisentraut)
서버 환경 설정 파일 정보가 담긴 pg_file_settings 시스템 뷰가 포함 되었음 (Sawada Masahiko)
pg_settings 시스템 뷰에 pending_restart 칼럼이 추가되었다. 이 값은 해당 설정이 반영 되려면, 서버가 재실행 되어야 하는데, 아직 서버를 재실행하지 않았음을 찾는데 유용하게 쓰일 것이다. (Peter Eisentraut)
ALTER SYSTEM 명령에 ALTER SYSTEM RESET 기능 추가 됨 (Vik Fearing)
이 기능은 postgresql.auto.conf 파일에 기록된 내용을 초기화 하는데 사용된다.
논리 복제 중 개별 변경에 대한 원본을 식별하기 위한 방법을 포함하는 복제 과정 추적 기능이 추가 됨. (Andres Freund)
이 기능은 복제 솔루션을 구현하는데 유용할 것이다.
WAL에서 멀티트랜잭션 커밋 정리 관련 코드가 재작성 되었음 (Andres Freund)
단순하고 보다 튼튼하게.
복구 작업 뒤에 할 작업을 지정할 수 있는 recovery_target_action 설정이 recovery.conf 파일에 추가 됨 (Petr Jelínek)
기존 pause_at_recovery_target 설정을 대체 함
대기 서버에서도 WAL 파일을 따로 보관 할 수 있는 archive_mode 설정값으로 always 추가 됨 (Fujii Masao)
대기 서버에서 WAL 처리 실패 시 재시도 간견을 조정할 수 있는 wal_retrieve_retry_interval 설정 추가 (Alexey Vasiliev, Michael Paquier)
이 설정은 로그 전달 방식 대기 서버에서 유용하게 쓰일 것이다.
WAL에 페이지 전체가 저장할 때 압축해서 저장할 수 있다. (Rahila Syed, Michael Paquier)
이렇게 해서 WAL 전체 크기를 줄일 수 있지만, 이 작업으로 WAL 기록할 때와 재실행 할 때 CPU 자원을 좀 쓴다. 이 기능은 wal_compression 환경 설정 매개 변수로 설정 가능하며, 기본값은 off다.
대기 서버가 운영 서버로 바뀌는 동안 WAL 아카이브는 그 파일에 .partial 확장자가 붙는다. (Heikki Linnakangas)
복제 작업에 대한 로그를 log_replication_commands 환경 설정 매개 변수로 지정할 수 있다. (Fujii Masao)
기본 설정으로는 log_statement 설정이 all로 되어있어도 IDENTIFY_SYSTEM 같은 복제 작업은 로그에 남지 않는다.
pg_replication_slots 시스템 뷰에 해당 복제 슬롯을 사용하는 프로세스를 표시 함 (Craig Ringer)
해당 칼럼은 active_pid이다.
recovery.conf 파일에 primary_conninfo 설정값으로 접속 URI(예: postgres://.... 형태)를 사용할 수 있음 (Alexander Shulgin)
INSERT 작업 중 제약조건 충돌이 일어났을 때 UPDATE 작업으로 바꾸거나, 해당 작업을 무시할 수 있음 (Peter Geoghegan, Heikki Linnakangas, Andres Freund)
구문은 INSERT ... ON CONFLICT DO NOTHING/UPDATE 형식이다. PostgreSQL에서는 일반적으로 알려진 UPSERT 명령을 이와 같은 형식으로 구현했다.
GROUP BY 절에서 GROUPING SETS, CUBE, ROLLUP 기능이 추가 됨 (Andrew Gierth, Atri Sharma)
UPDATE의 대상 칼럼의 변경값으로 단일 서브 쿼리를 사용할 수 있음 (Tom Lane)
UPDATE tab SET (col1, col2, ...) = (SELECT ...) 이런 형태의 구문이다.
SELECT 작업에서 해당 로우가 잠겨 있으면 작업을 중지하는 SKIP LOCKED 예약어가 추가 됨 (Thomas Munro)
기존 NOWAIT 구문에서는 작업 결과가 오류지만, 이 구문은 오류를 처리하지 않는다.
SELECT 작업에서 해당 자료의 부분만 뽑는 TABLESAMPLE 예약어가 추가 됨 (Petr Jelínek)
이 기능은 표준 SQL 테이블 표본 추출 방법을 제공한다. 추가로 사용자가 직접 표본 추출 만드는 방법도 제공한다.
잘못 입력한 칼럼 이름에 대해 쓸만한 칼럼 이름을 제안 해 줌 (Peter Geoghegan, Robert Haas)
EXPLAIN 출력에서 정렬 순서에 대한 보다 자세한 정보를 보여 줌 (Marius Timmer, Lukas Kreft, Arne Scheffer)
COLLATE, DESC, USING, NULLS FIRST/LAST 관련 정보가 좀 더 자세하게 나옴.
VACUUM 로그에 핀(pin) 작업 때문에 건너뛴 페이지 수를 남김 (Jim Nasby)
TRUNCATE 작업으로 변경 된 pg_stat* 뷰의 튜플 개수를 보다 정확하게 맞춤 (Alexander Shulgin)
REINDEX 명령에서 SCHEMA 옵션을 지정해 해당 스키마 안에 있는 모든 인덱스를 다시 만들 수 있음 (Sawada Masahiko)
REINDEX 명령에 VERBOSE 추가 함 (Sawada Masahiko)
REINDEX DATABASE 또는 SCHEMA 작업 시 VERBOSE 옵션이 없으면 개별 객체 이름을 보여 주지 않음 (Simon Riggs)
REINDEX 명령에서 FORCE 옵션 빠짐 (Fujii Masao)
로우 단위 보안 제어 추가 (Craig Ringer, KaiGai Kohei, Adam Brightwell, Dean Rasheed, Stephen Frost)
이 기능으로 사용자가 각 개별 로우 단위로 삽입, 변경, 조회하는 권한을 설정할 수 있음. 이 기능은 다음 같은 새 명령으로 지원 함: CREATE/ALTER/DROP POLICY, ALTER TABLE ... ENABLE/DISABLE ROW SECURITY.
ALTER TABLE ... SET LOGGED / UNLOGGED 구문 지원으로 이미 만들어진 테이블에 대해서도 WAL를 남기는 작동을 제어 할 수 있음 (Fabrízio de Royes Mello)
CREATE TABLE AS, CREATE INDEX, CREATE SEQUENCE, CREATE MATERIALIZED VIEW 명령에 IF NOT EXISTS 절 추가 (Fabrízio de Royes Mello)
ALTER TABLE ... RENAME CONSTRAINT 구문에서도 IF EXISTS 절 추가 (Bruce Momjian)
몇몇 DDL 명령에서 CURRENT_USER 또는 SESSION_USER 예약어를 쓸 수 있음. (Kyotaro Horiguchi, Álvaro Herrera)
해당 명령은 다음과 같다: ALTER USER, ALTER GROUP, ALTER ROLE, GRANT, , ALTER object OWNER TO 명령들
도메인 제약조건에 대한 설명을 추가할 수 있음 (Álvaro Herrera)
트리거나 참조키를 만들거나 수정하는 작업에서 잠금 수준을 낮췄음 (Simon Riggs, Andreas Karlsson)
LOCK TABLE ... ROW EXCLUSIVE MODE 명령에서 해당 테이블의 INSERT 도 추가 함 (Stephen Frost)
이전 버전에서는 UPDATE, DELETE, or TRUNCATE 작업에 대해서만 가능함
테이블과 도메인의 CHECK 제약조건 검사 순서가 그 이름 순으로 처리함 (Tom Lane)
이전 버전에서는 순서가 정해져 있지 않았음
CREATE/ALTER DATABASE 명령에서 ALLOW_CONNECTIONS, IS_TEMPLATE 옵션 추가 됨 (Vik Fearing)
이 기능이 추가 됨으로 pg_database 시스템 카탈로그를 직접 수정할 필요가 없음.
IMPORT FOREIGN SCHEMA 명령어 추가 (Ronan Dunklau, Michael Paquier, Tom Lane)
특정 스키마 기준으로 원격 서버에 있는 해당 테이블 모두를 한 번에 외부 테이블로 만들 수 있다.
외부 테이블에 CHECK 제약 조건을 사용할 수 있음 (Shigeru Hanada, Etsuro Fujita)
이 제약 조건은 로컬에 있어야 영향력이 있는 경우다. 그래야 쿼리 최적화 작업에서 보다 나은 실행 계획을 짤 수 있다. 제약 조건 따돌림 경우가 대표적인 예다.
외부 테이블에 대해서도 파티션 테이블을 구현 할 수 있음 (Shigeru Hanada, Etsuro Fujita)
CHECK 제약 조건을 만들 수 있게 되어 외부 테이블에 대해서도 그 제약 조건 사용 여부를 임의로 변경 할 수 있으며, 로컬 테이블처럼 여러 저장 옵션을 지정할 수 있고, 해당 테이블의 OID도 있다. 물론 이런 여러 기능이 외부 테이블에 아무런 영향을 끼치지 못한다 하더라도 작업은 가능하다.
외부 테이블의 조인 쿼리 성능 향상(join pushdown)을 위해 외부 자료 랩퍼에 사용자 정의 스캔 기능이 추가 됨 (KaiGai Kohei)
DDL 작업에 대한 추적을 쉽게 하기 위해 ddl_command_end 이벤트 트리거 추가 (Álvaro Herrera)
이 트리거에서 다루는 내용은 pg_event_trigger_ddl_commands()
집합 반환 함수로 제공한다. 물론 이 정보가 불충분 하다면, C 자료 구조체를 직접 살펴보면 된다.
ALTER TABLE 명령에 의해 작업 내용을 이벤트 트리거로 만들 수 있음 (Dimitri Fontaine)
데이베이스 차원의 이벤트 트리거 추가: COMMENT, SECURITY LABEL, GRANT/REVOKE (Álvaro Herrera)
pg_event_trigger_dropped_objects
함수가 반환하는 집합 내용 추가
(Álvaro Herrera)
삭제 작업이 쉬워짐.
xml 자료형에서 비었거나 모두 공백 문자로 채워진 내용 값을 허용함 (Peter Eisentraut)
이 처리는 SQL/XML 규약에 따른 것이다.
macaddr 자료형 입력 양식으로 xxxx-xxxx-xxxx 형태를 허용함 (Herwin Weststrate)
비표준 구문인 interval 자료형의 정밀도를 지정하는 방법을 허용하지 않음 (Bruce Momjian)
예를 들어, INTERVAL MINUTE TO SECOND(2) 구문이 표준 규약이고, 예전부터 허용했던 INTERVAL(2) MINUTE TO SECOND 구문이 이제부터는 사용할 수 없음
inet/cidr 자료형 용 선택 추정 연산자(selectivity estimators operators)가 추가되었고, 문자열 검색 함수에서 이 추정 기능이 향상 됨 (Emre Hasegeli, Tom Lane)
롤과 스키마 OID 처리를 간편하고, 출력을 보기 쉽게 하기 위해, regrole 과 regnamespace 자료형이 추가 됨 (Kyotaro Horiguchi)
jsonb 자료형 용
jsonb_set()
함수와 jsonb_pretty()
함수 추가
(Dmitry Dolgov, Andrew Dunstan, Petr Jelínek)
jsonb 자료형 만드는 to_jsonb()
,
jsonb_object()
,
jsonb_build_object()
,
jsonb_build_array()
,
jsonb_agg()
,
jsonb_object_agg()
함수들이 추가 됨
(Andrew Dunstan)
json 자료형을 위한 함수들은 이미 있었다.
jsonb 자료에서 문자열, 문자열 배열, 정수와 함께 사용하는 빼 낼 수 있는 연산자 제공 (Dmitry Dolgov, Andrew Dunstan)
jsonb 자료형 용 || 연산자 추가 (Dmitry Dolgov, Andrew Dunstan)
JSON null 값 없애는
json_strip_nulls()
, jsonb_strip_nulls()
함수 추가
(Andrew Dunstan)
numeric 자료형을 인자로 사용하는
generate_series()
함수 추가
(Plato Malugin)
array_agg()
함수와
ARRAY()
함수의 입력 인자로 배열형을 허용함
(Ali Akbar, Tom Lane)
해당 값의 배열 첨자를 반환하는 array_position()
함수와 array_positions()
함수 추가 됨 (Pavel Stehule)
point 자료형과 polygon 자료형 사이 거리를 계산하는 <-> 연산자 추가 (Alexander Korotkov)
SIMILAR TO 및 SUBSTRING 에서 이스케이프 문자로 멀티바이트 문자를 사용할 수 있음 (Jeff Davis)
이전 버전에서는 싱글바이트 문자만 허용했음
Add a width_bucket()
variant that supports any sortable data type and non-uniform bucket
widths (Petr Jelínek)
pg_read_file()
함수와 그 관련 함수에서 missing_ok 인자를 추가 함
(Michael Paquier, Heikki Linnakangas)
함수를 호출 할 때, 그 함수의 이름 기반 인자들을 지정할 때, => 기호를 사용할 수 있음 (Pavel Stehule)
이전 버전에서는 := 기호만 사용할 수 있었다. 이는 => 기호가 사용자 정의 함수가 될 수 있어, 제외 되었다. 하지만, PostgreSQL 9.0 부터 사용자 정의 이 연산자를 만드는 경우에 경고를 보여준다.
부동소수형을 짝수 가까운 정수로 바꾸는 함수를 POSIX 호환으로 바꿈 (Pedro Gimeno Fortea)
고유한 객체 식별 번호인 OID를 반환하는
pg_get_object_address()
함수가 추가 되었고,
이 함수의 반대 기능을 하는
pg_identify_object_as_address()
함수도 추가 되었음.
(Álvaro Herrera)
pg_stat_activity 뷰를 볼 때,
pg_cancel_backend()
함수와 pg_terminate_backend()
함수를
실행 할 때 보안 수위를 낮췄다.
(Stephen Frost)
이전 버전에서는 해당 세션의 현재 롤에 대해서만 가능 했지만, 이제부터 그 롤의 맵버쉽에 포함 되면 가능하다.
통계 정보 스냅샷의 시각을 출력하는
pg_stat_get_snapshot_timestamp()
함수 추가 (Matt Kelly)
이 함수는 스냅샷 파일이 파일 시스템에 쓰여진 마지막 시간을 보여준다.
multi-xid 나이를 계산하는 mxid_age()
함수 추가
(Bruce Momjian)
PL/Python 에서 복합 자료형 처리 개선 (Ed Behn, Ronan Dunklau)
복합 자료형의 배열을 PL/Python 함수에서 반환할 수 있음
PL/Python에서 부동소수형 형변환 기능 개선 (Marko Kreen)
SQL 자료형과 프로시져 언어에서 사용하는 자료형의 변환 규칙을 정의할 수 있음 (Peter Eisentraut)
이 기능은 CREATE/DROP TRANSFORM 명령어로 정의한다. hstore 자료형 또는 ltree 자료형에 대한 PL/Perl 또는 PL/Python 함수의 입출력이 이 기능으로 가능하다.
pg_archivecleanup, pg_test_fsync, pg_test_timing, pg_xlogdump 명령어가 contrib 에서 src/bin 으로 옮겨짐 (Peter Eisentraut)
추가 설치 없이 기본 설치 안에 포함되었음.
원복 (failback) 작업을 위한 옛 운영 서버를 대기 서버로 보다 편하게 구축할 수 있는 pg_rewind 명령어 추가 (Heikki Linnakangas)
pg_receivexlog 에서 물리적 복제 슬롯을 제어할 수 있음 (Michael Paquier)
--create-slot, --drop-slot 옵션 추가 됨
pg_receivexlog에서 --synchronous 옵션으로 WAL 디스크 동기화 기능 제공 (Furuya Osamu, Fujii Masao)
이 옵션이 없으면, WAL 파일은 해당 접속이 끊길 때 fsync 작업을 함
vacuumdb 명령어에서 --jobs 옵션을 사용해 병렬 처리를 할 수 있음 (Dilip Kumar)
vacuumdb 에서, 다중 연결인 경우에 그 비밀번호가 동일하면 더 이상 묻지 않음 (Haribabu Kommi, Michael Paquier)
reindexdb 명령에 --verbose 옵션 추가 (Sawada Masahiko)
pg_basebackup 명령에서 출력 양식이 tar 인 경우 테이블 스페이스 맵핑 파일을 사용할 수 있고, MS Windows 환경에서 100자 이상 되는 파일 경로와 심볼릭 링크를 지원함 (Amit Kapila)
pg_xlogdump 명령에서 그 파일의 통계 정보를 볼 수 있는 --stats 옵션 추가 (Abhijit Menon-Sen)
Allow psql to produce AsciiDoc output (Szymon Guz)
psql ECHO 변수 설정값으로 errors 모드가 추가 되어 실패한 명령들만 출력할 수 있음. (Pavel Stehule)
이 기능은 psql -b 옵션으로 지정한다.
psql에서 사용하는 칼럼, 헤더, 테두리 선문자를 유니코드로 지정 가능함 (Pavel Stehule)
단선 또는 복선을 지원 함; 기본값은 single.
psql PROMPT 변수값으로 %l 추가, 여러 줄 쿼리문인 경우 줄 번호를 출력함 (Sawada Masahiko)
\pset 명령의 옵션으로 pager_min_lines 를 추가해서 한 페이지 당 보여줄 줄 수를 지정할 수 있음 (Andrew Dunstan)
페이저 호출을 결정하는 줄 수 계산이 개선 됨 (Andrew Dunstan)
psql에서 --output 옵션이나 --log-file 옵션으로 지정한 파일 쓰기가 불가능한 경우 작업이 중지 된다. (Tom Lane, Daniel Vérité)
이전 버전에서는 이런 상황에 무시하고 작업이 계속 되었음
search_path 설정이 되었을 때, psql 탭 자동완성 기능 추가 (Jeff Janes)
현재, 첫번째 스키마에 대해서만 자동완성 대상이 됨
psql 명령에서 트리거와 룰에 대해서 자동 완성 기능 개선 (Andreas Karlsson)
psql \? 도움말에서 variables와 options 명령 추가 됨 (Pavel Stehule)
\? variables 명령은 psql에서 사용하는 내장 변수를 보여주고, \? options 명령은 명령행 옵션을 보여준다. \? commands 명령은 그외 기타 명령과 전통적인 출력 관련 정보를 보여 준다. 또한 명령행 옵션으로 --help=section 형태로도 이 도움말을 볼 수 있다.
psql에서 \db+ 명령으로 테이블스페이스 크기를 볼 수 있음 (Fabrízio de Royes Mello)
psql에서 \dT+ 명령으로 해당 자료형의 소유주를 볼 수 있음 (Magnus Hagander)
psql의 \watch 출력에서도 \timing 정보를 보여줌 (Fujii Masao)
명령행 옵션으로 --echo-hidden을 지정한 경우에도 \watch 명령으로 반복할 때는, 보여주지 않음
psql의 \sf, \ef 명령에서도 ECHO_HIDDEN 환경 설정을 반영 함 (Andrew Dunstan)
\set, \unset, :변수 형태에 대해서도 psql 자동 완성 기능이 개선되었음 (Pavel Stehule)
psql \c 명령에서 롤 이름에 대한 탭 자동 완성 기능 추가 (Ian Barwick)
pg_dump에서 --snapshot 옵션을 이용해서 특정 스냅샷 기준으로 덤프 가능 함 (Simon Riggs, Michael Paquier)
원격 스냅샷 기능은 pg_export_snapshot()
함수로 스냅샷을 만들거나, 논리 복제 슬롯을 먼저 만들어야 한다.
이 기능은 여러 pg_dump 프로세스간
같은 시점의 형상을 유지할 수 있도록 한다.
tar 출력 양식에서 8GB 초과하는 테이블도 수용 함 (Tom Lane)
POSIX 표준에서는 tar 로 묶이는 한 파일이 8GB 미만이어야 한다. 하지만, 요즘 대부분 tar 명령은 이 제한이 없다. 그래서, 오류를 내기 보다는 그냥 작업을 진행 할 수 있도록 변경 했음
pg_dump 에서 항상 서버 버전과 pg_dump 버전을 출력 하도록 함 (Jing Wang)
이전 버전에서는 --verbose 옵션을 추가 해야 출력 되었음
pg_dump, pg_dumpall, pg_restore 에서 -i/--ignore-version 옵션 빠짐 (Fujii Masao)
pg_ctl 명령에서 -o 옵션을 중복 해서 사용할 수 있음 (Bruce Momjian)
MS Windows 에서 pg_ctl 명령이 이벤트 소스 로그 기능을 제어 할 수 있도록 함 (MauMau)
이 기능은 pg_ctl에 대한 것이다. 서버 로그에 대한 부분은 postgresql.conf 파일에서 지정한다.
서버의 리슨 주소가 광역값(0.0.0.0 in IPv4 or :: in IPv6)으로 지정되어있다면, 글자 그대로 그 해당 주소로 접속하기 보다 루프백 주소로 접속 함. (Kondo Yuta)
이 변경 사항은 윈도우즈 환경에서 사용될 때를 고려한 것이다. 기타 다른 운영체제에서는 전통적으로 유닉스 도메인 소켓을 이용했다.
pg_upgrade 코드가 contrib 에서 src/bin 쪽으로 옮겨짐 (Peter Eisentraut)
pg_upgrade_support 확장 모듈이 메인 코어 서버 코드 안으로 옮겨진 것이다.
pg_upgrade에서 -o/-O 옵션을 중복 해서 사용할 수 있음 (Bruce Momjian)
pg_upgrade에서 문자 정렬 비교 기능이 향상됨 (Heikki Linnakangas)
8.3 버전 클러스터 업그레이드를 지원 안함 (Bruce Momjian)
pgbench 코드가 contrib 에서 src/bin 으로 옮겨짐 (Peter Eisentraut)
"접속 시간을 뺀" TPS 계산을 수정 함 (Tatsuo Ishii, Fabien Coelho)
pgbench 쓰레드 수가 클라이언트 연결 수보다 적을 때마다 접속 시간 계산을 잘 못 했었다. 버그 임에도 불구하고, 이전 버전 패치를 결정하지 않았다. 이전 버전 결과는 그 버전 안에서 그대로 두는 것이 낫다고 판단했기 때문이다.
지정한 간격 안에 발생하는 pgbench 트랜재션 수를 계산 할 수 있음 (Fabien Coelho)
--latency-limit 옵션으로 이 기능을 사용할 수 있음.
pgbench 내장 명령어인 \setrandom을 이용해서 정규분표형 임의값을 만들 수 있음. (Kondo Mitsumasa, Fabien Coelho)
pgbench에서 \set 명령으로 하나 이상의 연산자 (% (나머지) 연산자도 포함)를 포함하는 산술식을 사용할 수 있음. (Robert Haas, Fabien Coelho)
Simplify WAL record format (Heikki Linnakangas)
This allows external tools to more easily track what blocks are modified.
Improve the representation of transaction commit and abort WAL records (Andres Freund)
Add atomic memory operations API (Andres Freund)
Allow custom path and scan methods (KaiGai Kohei, Tom Lane)
This allows extensions greater control over the optimizer and executor.
Allow foreign data wrappers to do post-filter locking (Etsuro Fujita)
Foreign tables can now take part in INSERT ... ON CONFLICT DO NOTHING queries (Peter Geoghegan, Heikki Linnakangas, Andres Freund)
Foreign data wrappers must be modified to handle this. INSERT ... ON CONFLICT DO UPDATE is not supported on foreign tables.
Improve hash_create()
's API for selecting
simple-binary-key hash functions (Teodor Sigaev, Tom Lane)
Improve parallel execution infrastructure (Robert Haas, Amit Kapila, Noah Misch, Rushabh Lathia, Jeevan Chalke)
Remove Alpha (CPU) and Tru64 (OS) ports (Andres Freund)
Remove swap-byte-based spinlock implementation for ARMv5 and earlier CPUs (Robert Haas)
ARMv5's weak memory ordering made this locking implementation unsafe. Spinlock support is still possible on newer gcc implementations with atomics support.
Generate an error when excessively long (100+ character) file paths are written to tar files (Peter Eisentraut)
Tar does not support such overly-long paths.
Change index operator class for columns pg_seclabel.provider and pg_shseclabel.provider to be text_pattern_ops (Tom Lane)
This avoids possible problems with these indexes when different databases of a cluster have different default collations.
Change the spinlock primitives to function as compiler barriers (Robert Haas)
Allow higher-precision time stamp resolution on Windows 8, Windows Server 2012, and later Windows systems (Craig Ringer)
Install shared libraries to bin in MS Windows (Peter Eisentraut, Michael Paquier)
Install src/test/modules together with contrib on MSVC builds (Michael Paquier)
Allow configure's --with-extra-version option to be honored by the MSVC build (Michael Paquier)
Pass PGFILEDESC into MSVC contrib builds (Michael Paquier)
Add icons to all MSVC-built binaries and version information to all MS Windows binaries (Noah Misch)
MinGW already had such icons.
Add optional-argument support to the internal
getopt_long()
implementation (Michael Paquier,
Andres Freund)
This is used by the MSVC build.
pg_stat_statements 에서 통계정보를 위한 최소, 최대, 평균, 표준 편차 값 추가됨 (Mitsumasa Kondo, Andrew Dunstan)
pgcrypto 모듈에
PGP armor 헤더를 추출하는
pgp_armor_headers()
함수 추가
(Marko Tiikkaja, Heikki Linnakangas)
unaccent 에서 변경용으로 빈문자열 허용 (Mohammad Alhashash)
이 기능은 발음 기호가 구분 문자로 분리되는 언어에서도 이 모듈을 사용할 수 있게 함
unaccent 모듈에서 멀티문자를 소스 문자열로 사용할 수 있음 (Tom Lane)
이 기능은 발음 기호가 구분 문자로 분리되는 언어에서도 이 모듈을 사용할 수 있게 함. 또한 복잡한 액센트 기호 빼기 기능을 구현 했음.
contrib 디렉터리에 사용자 정의 테이블 표본 추출 방법에 대한 예제 확장 모듈로 tsm_system_rows, tsm_system_time 추가됨 (Petr Jelínek)
pageinspect 모듈에 GIN 인덱스 조사용 함수 추가 (Heikki Linnakangas, Peter Geoghegan, Michael Paquier)
pg_buffercache 뷰에 버퍼 핀에 대한 정보 추가 (Andres Freund)
pgstattuple_approx()
함수 추가로
pgstattuple 성능 향상
(Abhijit Menon-Sen)
dummy_seclabel, test_shm_mq, test_parser,worker_spi 모듈은 contrib 에서 src/test/modules 디렉터리로 옮김 (Álvaro Herrera)
이 모듈들은 서버 테스팅 용도로만 사용되어, PostgreSQL 패키징을 할 때 굳이 필요 없다.