Les expressions après select doit correspondre à une seule valeur. Depuis jsonb_to_recordset renvoie un ensemble de lignes et de colonnes, vous ne pouvez pas l'utiliser ici.
La solution est un cross join lateral , qui vous permet de développer une ligne en plusieurs lignes à l'aide d'une fonction. Cela vous donne des lignes uniques qui select peut agir sur. Par exemple :
select *
from journal j
cross join lateral
jsonb_to_recordset(j.data#>'{context, data, files}') as d(id int, name text)
where j.id = 'ap32bbofopvo7pjgo07g'
Notez que le #>> opérateur
renvoie le type text , et le #> l'opérateur renvoie le type jsonb . Comme jsonb_to_recordset attend jsonb comme premier paramètre, j'utilise #> .
Regardez-le fonctionner sur rextester.com