我想要这样的东西:
SELECT 1, (CASE WHEN TRUE THEN (2, 3) ELSE (4, 5) END).*;
...希望得到1 | 2 | 3
。但在 PostgreSQL 11 中,这个查询抛出:
错误:记录类型尚未注册
没有*
它显然会返回1 | (2,3)
。
这可能吗?
我想要这样的东西:
SELECT 1, (CASE WHEN TRUE THEN (2, 3) ELSE (4, 5) END).*;
...希望得到1 | 2 | 3
。但在 PostgreSQL 11 中,这个查询抛出:
错误:记录类型尚未注册
没有*
它显然会返回1 | (2,3)
。
这可能吗?
具有
(2, 3)
类型记录,即 Postgres 不知道它包含哪些(甚至多少)列。您只能将.*
语法用于已知(“注册”)类型。您可以定义自己的元组类型并使用它而不是记录:
如果你绝对需要一个返回记录的表达式,你可以
tuple
通过一个text
表示将它们转换为 s :(在线演示)