Výrazy za select se musí vyhodnotit na jedinou hodnotu. Od jsonb_to_recordset vrátí sadu řádků a sloupců, nemůžete ji tam použít.
Řešením je cross join lateral , která umožňuje rozbalit jeden řádek na více řádků pomocí funkce. Získáte tak jednotlivé řádky, které select může jednat. Například:
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'
Všimněte si, že #>> operátor
vrátí typ text a #> operátor vrátí typ jsonb . Jako jsonb_to_recordset očekává jsonb jako první parametr používám #> .
Podívejte se, jak to funguje na rextester.com