PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

C'è un modo per indirizzare tutti gli elementi dell'array JSON durante la creazione di un vincolo in PostgreSQL?

Quindi ho posto a questa domanda sulla mailing list di PostgreSQL , come suggerito da Craig Ringer , e ho la risposta.

In breve, la soluzione è scrivere una procedura che materializza l'array JSON nell'array 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 ;

e usa quella procedura in CHECK affermazione:

alter table orders add check (1 <= ALL(data_product_ids(data)));

Per maggiori dettagli su come funziona, vedere la risposta su Mailing list di PostgreSQL . Ringraziamo Joel Hoffman.