SELECT
的输出列
前面的小节中给出的规则将会导致对SQL查询中的所有表达式分配非unknown
数据类型,不过作为SELECT
命令的简单输出列出现的未指定类型的文本除外。例如,在
SELECT 'Hello World';
中没有标识该字符串应该取何种类型。在这种情况下,PostgreSQL将会退而求其次将其类型决定为text
。
当SELECT
处于UNION
(或者INTERSECT
,或者EXCEPT
)结构的一边或者出现在INSERT ... SELECT
中时,这条规则就不适用了,因为在前面小节中给出的规则会优先。在第一种情况下未指定类型文本的类型将从UNION
的另一边取得,而在第二种情况下未指定类型文本的类型将从目标列取得。
出于这样的目的,RETURNING
列表采用和SELECT
输出列表同样的方式对待。
在PostgreSQL 10之前,这条规则还不存在,SELECT
输出列表中未指定类型的文本的类型会被留成unknown
。这样做会导致各种不好的后果,因此新版本中做出了改变。