Изразите след select
трябва да се оцени на една стойност. Тъй като jsonb_to_recordset
връща набор от редове и колони, не можете да го използвате там.
Решението е cross join lateral
, което ви позволява да разширите един ред в множество редове с помощта на функция. Това ви дава единични редове, които select
може да действа върху. Например:
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'
Имайте предвид, че #>>
оператор
връща тип text
и #>
операторът връща тип jsonb
. Като jsonb_to_recordset
очаква jsonb
като първи параметър използвам #>
.
Вижте как работи на rextester.com