我正在做一个基本的json_to_recordset
查询,据我所知,它遵循the docs中的模式。但是我遇到了我不理解的错误。 (我将在代码示例后总结我的研究。)
select my_schema.my_func(2, 2366800)
=> my_func
json
----------------------------------------------------
[{"col_a":"...", "col_b":"...", "col_c":"..."}, ...]
select *
from json_to_recordset(my_schema.my_func(2, 2366800))
as results (col_a TEXT,
col_b TEXT,
col_c NUMERIC(10,2))
=> ERROR: set-valued function called in context that cannot accept a set
除了这些文档之外,我还针对其他json_to_recordset
示例进行了查询。 (1,2,3)据我所知,我的查询应该可以正常工作。
我调查了set-valued function
错误。 ({1,2,3;甚至是4,它表示:“当函数返回SETOF时,您需要将其视为表。” )不幸的是,我没有找到解释为什么在此特定查询中发生此错误的原因。
答案 0 :(得分:1)
我的另一个答案是我的问题的直接答案,但是我想单独列出解决方案,因为该解决方案是针对这种情况的,而答案是通用的。
最简单的解决方案是修改my_func
以返回json
而不是setof json
,但是此函数在其他地方使用,因此我想处理类型不匹配而不修改{{1} }。
如here所述,“当函数返回SETOF时,您需要将其视为表。”因此,解决方案包括将my_func
的输出视为一个表(具有单个值),并将该行传递给my_func
函数。 Postgres的横向连接可以达到目的:
json_to_recordset
答案 1 :(得分:0)
如@klin的注释中所述,问题在于//site/foo.css
返回my_func
,而setof json
占用了json_to_recordset
。该类型不匹配是导致错误的原因。