Vì vậy, tôi đã hỏi câu hỏi này trên danh sách gửi thư PostgreSQL , như do Craig Ringer đề xuất và tôi đã có câu trả lời.
Tóm lại, giải pháp là viết một thủ tục hiện thực hóa mảng JSON thành mảng PostgreSQL:
create function data_product_ids(JSON) returns integer[] immutable as $$
select array_agg((a->>'product_id')::integer) from
json_array_elements($1->'products') as a $$ language sql ;
và sử dụng quy trình đó trong CHECK
trạng thái:
alter table orders add check (1 <= ALL(data_product_ids(data)));
Để biết thêm chi tiết về cách hoạt động của điều này, hãy xem câu trả lời trên Danh sách gửi thư PostgreSQL . Tín dụng cho Joel Hoffman.