इसलिए मैंने यह सवाल पोस्टग्रेएसक्यूएल मेलिंग सूची पर पूछा , जैसा क्रेग रिंगर द्वारा सुझाया गया , और मुझे उत्तर मिल गया है।
संक्षेप में समाधान एक प्रक्रिया लिखना है जो JSON सरणी को 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 ;
और उस प्रक्रिया का उपयोग CHECK
. में करें स्टेटमेंट:
alter table orders add check (1 <= ALL(data_product_ids(data)));
यह कैसे काम करता है, इस बारे में अधिक जानकारी के लिए उत्तर पर देखें। PostgreSQL मेलिंग सूची . जोएल हॉफमैन को श्रेय।