sql >> Database >  >> RDS >> PostgreSQL

Is er een manier om alle elementen van de JSON-array aan te pakken bij het maken van een beperking in PostgreSQL?

Dus ik stelde deze vraag op Postgres.gmail.com">SQL-mailinglijst , als voorgesteld door Craig Ringer , en ik heb het antwoord.

In het kort is de oplossing om een ​​procedure te schrijven die JSON-array materialiseert naar PostgreSQL-array:

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 ;

en gebruik die procedure in CHECK verklaring:

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

Voor meer details over hoe dit werkt, zie het antwoord op PostgreSQL-mailinglijst . Met dank aan Joel Hoffman.



  1. Onderhoudsplannen voor databases maken

  2. Wat is het verschil tussen VARCHAR(255) en TINYTEXT-tekenreeksen in MySQL?

  3. Hoe het middelpunt van 2 of 3 radiale locaties te krijgen (breedtegraad, lengtegraad)

  4. Probleem bij het uitvoeren van een Proc - Oracle PL/SQL