Cloud Spanner용 PostgreSQL 인터페이스의 알려진 문제

이 페이지에서는 Cloud Spanner에서 지원되는 PostgreSQL 기능과 해당 오픈소스 PostgreSQL 간의 동작 차이점을 설명합니다.

Float8 언더플로

부동 소수점 수학 결과가 0으로 잘리면 오픈소스 PostgreSQL이 ERROR: value out of range: underflow와 같은 오류를 반환하는 경우가 있습니다. 0과 너무 가까우며 0과 구분하기 어려울 수 있는 숫자는 언더플로 오류를 유발합니다.

PostgreSQL 인터페이스는 이러한 경우 오류를 반환하지 않습니다. 대신 잘린 0 값을 반환합니다.

concat() 함수

PostgreSQL 인터페이스에서 concat() 함수는 인수가 NULL이면 NULL을 반환합니다. 그러나 오픈소스 PostgreSQL에서 이 함수는 NULL을 무시하고 모든 NULL이 아닌 인수의 연결을 반환하거나 모든 인수가 NULL인 경우 빈 문자열을 반환합니다. 예를 들면 다음과 같습니다.

-- Returns `abcdef` in open-source PostgreSQL.
-- Returns NULL in the PostgreSQL interface.
select concat('abc'::text, NULL::text, 'def'::text);

PostgreSQL 인터페이스와 오픈소스 PostgreSQL은 || 연산자와 동일합니다.

날짜/시간 리터럴

PostgreSQL 인터페이스가 잘못된 결과를 반환하므로 datetimestamptz에는 특수 리터럴(now ,yesterday, today, tomorrow, epoch, -infinity, infinity)을 사용하지 않는 것이 좋습니다.

예를 들어 다음 쿼리는 잘못된 결과를 반환합니다.

SELECT 'today'::timestamptz;