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