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

Er der en måde at adressere alle elementer i JSON-arrayet, når du opretter en begrænsning i PostgreSQL?

Så jeg stillede dette spørgsmål på postlisten , som foreslået af Craig Ringer , og jeg har svaret.

Kort sagt er løsningen at skrive en procedure, som materialiserer JSON-array til 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 ;

og brug denne procedure i CHECK udsagn:

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

For flere detaljer om, hvordan dette fungerer, se svaret på PostgreSQL-mailingliste . Kredit til Joel Hoffman.



  1. Hvordan opretter jeg en lagret procedure, der valgfrit vil søge i kolonner?

  2. Sådan eksporteres SQL Server-data fra tabel til en CSV-fil

  3. Django / MySQL:Hvordan laver man autonome transaktioner (forpligter kun undersæt af forespørgsler)?

  4. Sådan opretter du udsigt i oracle