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