SELECT 输出列 #前面各节给出的规则会为 SQL 查询中的所有表达式赋予非 unknown 数据类型,但作为 SELECT 命令的简单输出列出现的未指定类型文字除外。例如,在
SELECT 'Hello World';
中,没有任何信息可用于确定应将该字符串文字视为什么类型。在这种情况下,PostgreSQL 会回退为将该文字的类型解析为 text。
当SELECT是UNION(或INTERSECT、EXCEPT)结构的一端,或者出现在INSERT ... SELECT中时,这条规则不适用,因为前面各节给出的规则具有更高优先级。在前一种情况下,未指定类型文字的类型可以从UNION的另一侧取得;在后一种情况下,则从目标列取得。
为此目的,RETURNING列表与SELECT输出列表一视同仁。
在PostgreSQL 10 之前,这条规则并不存在,SELECT输出列表中的未指定类型文字会被保留为unknown类型。这会带来各种不良后果,因此后来做了修改。