【发布时间】:2017-09-23 06:36:53
【问题描述】:
我正在寻找以下内容的解释,如果我运行这样的事情,我会得到一个 unknown 类型,
SELECT pg_typeof(a)
FROM ( SELECT null ) AS t(a);
pg_typeof
-----------
unknown
(1 row)
然而,随着复杂度的增加,它神奇地变成了text,
SELECT pg_typeof(a)
FROM (
SELECT null
UNION SELECT null
) AS t(a);
pg_typeof
-----------
text
(1 row)
显式转换不会改变这一点,这也会返回text,
SELECT pg_typeof(a)
FROM (
SELECT null::unknown
UNION SELECT null::unknown
) AS t(a);
有趣的是,这很有效,
SELECT pg_typeof(a)
FROM (
SELECT null
UNION SELECT 42
) AS t(a);
但事实并非如此,
SELECT pg_typeof(a)
FROM (
SELECT null
UNION SELECT null
UNION SELECT 42
) AS t(a);
如果unknown 类型在上述情况下被假定为文本,它有什么用途?
【问题讨论】:
-
我投票结束我自己的问题,因为我认为 Database Administrators 上的匹配更好
-
我也投票支持迁移,但我不知道是否值得:这些案例是perfectly described in the docs(第 3 点)——除了最后一个。这只是一个precedence issue。
标签: sql postgresql types type-inference type-promotion