19.13. 버전 및 플랫폼 호환성

19.13.1. 이전 PostgreSQL 버전
19.13.2. 플랫폼 및 클라이언트 호환성

19.13.1. 이전 PostgreSQL 버전

array_nulls (boolean)

이것은 따옴표 없는 NULL을 null 배열 요소로 지정하는 것으로 배열 입력 파서에 인식시킬 것인지를 제어한다. 기본적으로 이것은, null 값이 포함된 배열값의 입력을 허용하는 on이다. 단, 8.2 이전 버전의 PostgreSQL은 배열에서 null 값을 지원하지 않으며, 따라서 string 값 NULL을 사용하는 일반적인 배열 요소를 지정하는 것으로 NULL을 처리한다. 예전 동작을 필요로 하는 어플리케이션 이전 버전과의 호환성 때문에 이 변수를 off로 설정할 수 있다.

이 변수가 off인 경우에도 null 값을 포함한 배열 변수를 생성하는 것도 가능하다.

backslash_quote (enum)

이것은 string 리터럴에서 따옴표를 \'로 표기할 수 있는지를 제어한다. 따옴표를 SQL 표준 방식으로 표기하는 방법은 이중으로 사용하는 것('')이지만 PostgreSQL은 오래 전부터 \'도 허용해 왔다. 그러나, \'를 사용하면 일부 클라이언트 문자 집합 인코딩에서 마지막 바이트가 수치상 ASCII \와 동일한 멀티바이트 문자가 있기 때문에 보안상 위험하다. 클라이언트 측 코드가 잘못 이스케이프할 경우 SQL 인젝션 공격이 가능하다. 이러한 위험은, 역슬래시에 의해 이스케이프되는 따옴표가 있는 경우에 서버가 쿼리를 거부하도록 함으로써 예방할 수 있다. backslash_quote의 허용 값은 on(항상 \' 허용), off(항상 거부) 및 safe_encoding(클라이언트 인코딩이 멀티바이트 문자 내에서 ASCII \를 수락하지 않는 경우에만 허용)이다. 기본 설정은 safe_encoding이다.

표준 준수 string 리터럴에서, \\라는 점에 유의해야 한다. 이 매개 변수는 이스케이프 string 구문(E'...')을 비롯한 비 표준 준수 리터럴의 처리에만 영향을 준다.

escape_string_warning (boolean)

on인 경우 역슬래시(\)가 일반 string 리터럴('...' 구문)에 있고 standard_conforming_strings가 off인 경우 경고가 나타난다. 기본값은 on이다.

SQL 표준에 따라 일반 string의 기본 동작은 역슬래시를 일반 문자로 처리하기 때문에 역슬래시를 이스케이프로 사용하려는 애플리케이션은 이스케이프 string 구문(E'...')을 수정해야 한다. 이 변수를 활성화하면 수정이 필요한 코드를 찾는 데 도움이 된다.

lo_compat_privileges (boolean)

9.0 이전의 PostgreSQL 릴리스에서 거대(large) 개체는 액세스 권한이 없었으며, 항상 모든 사용자에 의해 읽기 및 쓰기가 가능했었다. 이 변수를 on으로 설정하면 이전 릴리스와의 호환성에 대한 새 권한 검사가 비활성화된다. 기본값은 off이다. 슈퍼유저만 이 설정을 변경할 수 있다.

이 변수를 설정한다고 해서 거대(large) 개체와 관련된 모든 보안 검사가 비활성화되는 것은 아니다. 기본 동작에 대한 것만 PostgreSQL 9.0에서 변경되었다.

operator_precedence_warning (boolean)

이 설정값을 on으로 해 두면, 구문 분석시 PostgreSQL 9.4 포함 이전 버전에 사용되었던 연산자 우선 순위에 대한 변경 사항에 대해서 경고를 보여 준다. 이 설정은 이전 버전부터 사용된 응용프로그램에서 연산자 우선순위 때문에 다르게 처리되는 쿼리들을 감시하는데 유용하게 사용된다. 이 설정은 구문 분석 처리를 이전 버전과 동일하게 변경하지는 않는다. 기본값은 off다.

연산자 우선순위에 대한 자세한 것은 4.1.6절에서 다룬다.

quote_all_identifiers (boolean)

데이터베이스가 SQL을 생성하는 경우 (현재) 키워드가 없더라도 모든 식별자에서 따옴표를 사용해야 한다. 이것은 EXPLAIN 출력과 pg_get_viewdef 같은 함수의 결과에 영향을 준다. pg_dumppg_dumpall--quote-all-identifiers 옵션도 참조 바란다.

standard_conforming_strings (boolean)

이것은 대개 string 리터럴('...')이 역슬래시를 SQL 표준에 지정된 대로 문자 그대로 처리할 것인지 제어한다. PostgreSQL 9.1 초반에는 기본값이 on이다(이전 릴리스에서는 기본값이 off). 애플리케이션은 string 리터럴 처리하는 방법을 결정하는 이 매개 변수를 검사한다. 이 매개 변수가 존재하면 이스케이프 string 구문(E'...')이 지원되는 것으로 볼 수 있다. 애플리케이션이 역슬래시를 이스케이프 문자로 처리하기를 원할 경우에는 이스케이프 string 구문(4.1.2.2절)을 사용해야 한다.

synchronize_seqscans (boolean)

이것은 거대(large) 테이블의 순차 스캔을 허용하여 서로를 동기화하므로 동시 스캔은 동일한 시간에 동일한 블록을 읽고 I/O 작업 부하를 공유한다. 이것이 활성화되면 스캔이 테이블 중간에서 시작되며, 이미 진행 중인 스캔 활동과 동기화되도록 모든 행을 끝까지 랩어라운드한다. 이것은 결과적으로 ORDER BY 절이 없는 쿼리에 의해 리턴된 행 정렬에서 예측 불가능한 변경으로 이어진다. 이 매개 변수를 off로 설정하면 순차 스캔이 항상 테이블 초반에 시작되는 8.3 이전의 동작이 보장된다. 기본값은 on이다.

19.13.2. 플랫폼 및 클라이언트 호환성

transform_null_equals (boolean)

on으로 설정되면 양식의 표현식 expr = NULL(또는 NULL = expr)은 expr IS NULL로 처리된다. 즉, expr가 null 값으로 평가되면 true가 리턴되고, 그 외에는 false가 리턴된다. expr = NULL의 올바른 SQL 규격 호환 동작은 항상 null을 리턴한다(알 수 없음). 그러므로 이 매개 변수의 기본값은 off이다.

그러나, Microsoft Access에서 필터링된 양식은 expr = NULL을 사용하여 null 값을 테스트하기 위한 쿼리를 생성하므로 해당 인터페이스를 사용하여 데이터베이스에 액세스하는 경우 사용자는 이 옵션을 on으로 설정하고자 할 수 있다. 표현식 expr = NULL은 항상 null 값을 리턴하므로(SQL 표준 해석 사용), 그다지 유용하지 않고, 일반적인 애플리케이션에 거의 나타나지 않으므로 실제로 이 옵션은 해가 되지 않는다. 하지만 새 사용자는 null 값이 관련된 표현식을 헷갈려 하므로 이 옵션은 기본적으로 off로 설정되어 있다.

이 옵션은 정확한 양식 = NULL에만 영향을 미치며, 다른 비교 연산자 또는 동일한 연산자(예: IN)와 관련된 몇몇 표현식과 계산상 동일한 다른 표현식에는 영향을 미치지는 않는다. 따라서 이 옵션이 나쁜 프로그래밍에 대한 해결책은 아니다.

관련 내용은 9.2절을 참조 바란다.