SELECT
输出列 #前述部分中给出的规则将导致在 SQL 查询中为所有表达式分配非 unknown
数据类型,但用作 SELECT
命令的简单输出列中出现、类型未指定的文字除外。例如,在
SELECT 'Hello World';
中没有任何东西可以识别出字符串文字应该用作什么类型。在这种情况下,PostgreSQL 将回退到将文字的类型解析为 text
。
当 SELECT
是 UNION
(或者 INTERSECT
或 EXCEPT
)结构的一支,或者出现在 INSERT ... SELECT
中时,由于前述章节中给出的规则具有优先权,因此此规则不会应用。在这种情况下,可以从第一个 UNION
中提取未指定类型文字的类型,或从第二个情况的目标列中提取文字的类型。
RETURNING
列表为此目的被视为与 SELECT
输出列表相同。
在 PostgreSQL 10 之前,没有此规则,并且 SELECT
输出列表中类型未指定的文字保留为 unknown
类型。这种情况产生了各种不良后果,因此已对其进行了更改。