PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Existe uma maneira de abordar todos os elementos do array JSON ao criar uma restrição no PostgreSQL?


Então eu perguntei esta pergunta na lista de discussão do PostgreSQL , como sugerido por Craig Ringer , e eu tenho a resposta.

Resumindo, a solução é escrever um procedimento que materialize o array JSON para o array 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 ;

e use esse procedimento em CHECK declaração:
alter table orders add check (1 <= ALL(data_product_ids(data)));

Para obter mais detalhes sobre como isso funciona, veja a resposta em Lista de discussão PostgreSQL . Créditos a Joel Hoffman.