sql >> Databasteknik >  >> RDS >> PostgreSQL

Finns det ett sätt att ta itu med alla element i JSON-arrayen när man skapar en begränsning i PostgreSQL?

Så jag frågade den här frågan på postlistan , som föreslagen av Craig Ringer , och jag har svaret.

Kort sagt är lösningen att skriva en procedur som materialiserar JSON-arrayen till PostgreSQL-arrayen:

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 ;

och använd den proceduren i CHECK uttalande:

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

För mer information om hur detta fungerar se svaret på PostgreSQL e-postlista . Tack till Joel Hoffman.



  1. NOT NULL-begränsning över en uppsättning kolumner

  2. Hur hanterar man MySQL:s främmande nyckelfel i Php?

  3. TypeORM FindOperatorer med transformator

  4. Postgresql - Hur extraherar jag den första förekomsten av en delsträng i en sträng med hjälp av ett reguljärt uttrycksmönster?