Các biểu thức sau select
phải đánh giá đến một giá trị duy nhất. Kể từ jsonb_to_recordset
trả về một tập hợp các hàng và cột, bạn không thể sử dụng nó ở đó.
Giải pháp là một bên cross join lateral
, cho phép bạn mở rộng một hàng thành nhiều hàng bằng cách sử dụng một hàm. Điều đó cung cấp cho bạn các hàng đơn select
có thể hành động. Ví dụ:
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'
Lưu ý rằng #>>
nhà điều hành
trả về loại text
và #>
toán tử trả về kiểu jsonb
. Dưới dạng jsonb_to_recordset
mong đợi jsonb
là tham số đầu tiên của nó mà tôi đang sử dụng #>
.
Xem nó hoạt động tại rextester.com