10.6. SELECT的输出列

前面的小节中给出的规则将会导致对SQL查询中的所有表达式分配非unknown数据类型,不过作为SELECT命令的简单输出列出现的未指定类型的文本除外。例如,在

SELECT 'Hello World';

中没有标识该字符串应该取何种类型。在这种情况下,PostgreSQL将会退而求其次将其类型决定为text

SELECT处于UNION(或者INTERSECT,或者EXCEPT)结构的一边或者出现在INSERT ... SELECT中时,这条规则就不适用了,因为在前面小节中给出的规则会优先。在第一种情况下未指定类型文本的类型将从UNION的另一边取得,而在第二种情况下未指定类型文本的类型将从目标列取得。

出于这样的目的,RETURNING列表采用和SELECT输出列表同样的方式对待。

注意

PostgreSQL 10之前,这条规则还不存在,SELECT输出列表中未指定类型的文本的类型会被留成unknown。这样做会导致各种不好的后果,因此新版本中做出了改变。