PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Има ли начин да се адресират всички елементи на JSON масива при създаване на ограничение в PostgreSQL?

Затова зададох този въпрос в пощенския списък на PostgreSQL , като предложено от Крейг Рингър и имам отговора.

Накратко, решението е да се напише процедура, която материализира JSON масив в 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 ;

и използвайте тази процедура в CHECK изявление:

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

За повече подробности как работи това вижте отговора на Пощенски списък на PostgreSQL . Благодарение на Джоел Хофман.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Заявки в заявките:Има ли по-добър начин?

  2. Грешки в еволюцията на Heroku

  3. Django индексира ли Autofield/ID ключове в PostgreSQL?

  4. PostgreSQL - Проверете съществуването на външен ключ, когато правите SELECT

  5. Грешка в PostgreSQL:Връзката вече съществува