您的try 基本上是正确的,但您出于某种原因添加了多个FROM
列表,这是不允许的.如果你用->>
accessors来代替demo,你可以用一个FROM
来代替:
select (j->>'a')::int as a,
(j->>'b')::double precision as b
from get_my_records( 'some', 'args' ) as jdata(j);
您不能在一个查询中包含多个from
个列表--您必须将其拆分为CTE/subqueries
SELECT *
FROM jsonb_to_record( val ) as x( a int, b double precision )
FROM get_my_records( 'some', 'arg' ) AS val;
ERROR: syntax error at or near "FROM"
LINE 4: FROM get_my_records( 'some', 'arg' ) AS val;
^
或者,你也可以把你的from
条 list 增加joining the sources条:
SELECT x.*
FROM get_my_records( 'some', 'arg' ) AS val
LEFT JOIN LATERAL jsonb_to_record(val) as x(a int,b double precision) ON TRUE;
您可以使用逗号,
来隐式联接,因为lateral
是由这些伪装成源的集合返回函数之间的依赖关系暗示的,而on true
只是允许它们自由联接.
SELECT x.*
FROM get_my_records( 'some', 'arg' ) AS val,
jsonb_to_record( val ) as x( a int, b double precision );