PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Czy istnieje sposób na zaadresowanie wszystkich elementów tablicy JSON podczas tworzenia ograniczenia w PostgreSQL?

Zapytałem więc to pytanie na Postgre> , jako sugerowane przez Craiga Ringera i mam odpowiedź.

W skrócie rozwiązaniem jest napisanie procedury, która materializuje tablicę JSON w tablicy 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 ;

i użyj tej procedury w CHECK oświadczenie:

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

Aby uzyskać więcej informacji na temat tego, jak to działa, zobacz odpowiedź na Lista mailingowa PostgreSQL . Kredyty dla Joela Hoffmana.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jakie jest domyślne hasło do postgreSQL instalowanego przez wersję Gitlab Omibus?

  2. Wiele baz danych z Railsami nie działającymi dla zdalnej bazy danych

  3. Postgres 9.4:Uwzględnij kolumnę siostrzaną w każdym wyniku tablicy jsonb

  4. Tworzenie aplikacji wielodostępnej przy użyciu schematów PostgreSQL i Rails

  5. pobierz ostatnie trzymiesięczne rekordy z tabeli