As expressões após
select
deve avaliar para um único valor. Desde jsonb_to_recordset
retorna um conjunto de linhas e colunas, você não pode usá-lo lá. A solução é uma
cross join lateral
, que permite expandir uma linha em várias linhas usando uma função. Isso fornece linhas únicas que select
pode agir. Por exemplo: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'
Observe que o
#>>
operador
retorna o tipo text
, e o #>
operador retorna o tipo jsonb
. Como jsonb_to_recordset
espera jsonb
como seu primeiro parâmetro estou usando #>
. Veja em rextester.com