Uttrycken efter select
måste utvärderas till ett enda värde. Sedan jsonb_to_recordset
returnerar en uppsättning rader och kolumner, du kan inte använda den där.
Lösningen är en cross join lateral
, som låter dig utöka en rad till flera rader med hjälp av en funktion. Det ger dig enstaka rader som select
kan agera på. Till exempel:
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'
Observera att #>>
operatör
returnerar typ text
, och #>
operatorn returnerar typen jsonb
. Som jsonb_to_recordset
förväntar sig jsonb
som första parameter använder jag #>
.
Se hur det fungerar på rextester.com