The rules given in the preceding sections will result in assignment of non-unknown
data types to all expressions in a SQL query, except for unspecified-type literals that appear as simple output columns of aSELECT
command. For example, in
there is nothing to identify what type the string literal should be taken as. In this situationPostgreSQLwill fall back to resolving the literal's type astext
.
When theSELECT
is one arm of aUNION
(orINTERSECT
orEXCEPT
) construct, or when it appears withinINSERT ... SELECT
, this rule is not applied since rules given in preceding sections take precedence. The type of an unspecified-type literal can be taken from the otherUNION
arm in the first case, or from the destination column in the second case.
RETURNING
lists are treated the same asSELECT
output lists for this purpose.
Prior toPostgreSQL10, this rule did not exist, and unspecified-type literals in aSELECT
output list were left as typeunknown
. That had assorted bad consequences, so it's been changed.