Wyrażenia po select
musi ewaluować do pojedynczej wartości. Od jsonb_to_recordset
zwraca zestaw wierszy i kolumn, nie możesz ich tam użyć.
Rozwiązaniem jest cross join lateral
, który pozwala rozwinąć jeden wiersz na wiele wierszy za pomocą funkcji. To daje pojedyncze wiersze, które select
może działać. Na przykład:
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'
Pamiętaj, że #>>
operator
zwraca typ text
i #>
operator zwraca typ jsonb
. Jako jsonb_to_recordset
oczekuje jsonb
jako pierwszy parametr używam #>
.
Zobacz, jak działa na rextester.com