基本的json_to_recordset查询获取“在无法接受集合的上下文中调用的集合值函数”

时间:2018-11-07 17:32:53

标签: postgresql

我正在做一个基本的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示例进行了查询。 (123)据我所知,我的查询应该可以正常工作。

我调查了set-valued function错误。 ({123;甚至是4,它表示:“当函数返回SETOF时,您需要将其视为表。” )不幸的是,我没有找到解释为什么在此特定查询中发生此错误的原因。

2 个答案:

答案 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。该类型不匹配是导致错误的原因。