此页面指出了 Cloud Spanner 支持的 PostgreSQL 功能与其开源 PostgreSQL 等效功能的行为差异。
浮点数 8 下溢
在某些情况下,如果浮点数学结果的结果被截断为 0,开源 PostgreSQL 会返回一个错误,如 ERROR: value out of range: underflow
。数值接近 0 且无法表示为 0 会导致下溢错误。
在这些情况下,PostgreSQL 接口不会返回错误,而是会返回截断的 0 值。
concat() 函数
在 PostgreSQL 界面中,如果任何参数为 NULL,concat()
函数会返回 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 具有与 ||
运算符相同的行为。
日期/时间字面量
避免对 date
和 timestamptz
使用以下特殊字面量,因为 PostgreSQL 接口返回的结果不正确:now
、yesterday
、today
、tomorrow
、epoch
、-infinity
和 infinity
。
例如,以下查询会返回不正确的结果:
SELECT 'today'::timestamptz;