sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQLで制約を作成するときにJSON配列のすべての要素に対処する方法はありますか?

    そこで、PostgreSQLメーリングリストでこの質問をしましたCraigRingerによる提案 、そして私は答えを持っています。

    要するに、解決策は、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メーリングリスト 。 JoelHoffmanのクレジット。



    1. MySQL/InnoDBで自動インクリメントをエミュレートする

    2. SpringJDBCTemplate-1つのクエリで複数のパラメータを使用して複数の結果を取得する方法

    3. mysqlで月番号の代わりに月名を表示する

    4. PL/SQLでform-dataとパラメータを使用してPOSTリクエストを送信する方法