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

Postgresの複合JSONB配列クエリ?

    トップレベルの配列を分割し、そこから要素を確認する必要があります:

    select distinct id, content
    FROM test
    JOIN lateral (
        select elems 
        FROM jsonb_array_elements(content) jae(elems)
    ) all_arrays ON TRUE
    WHERE elems ->> 0 = 'first 1'
    and elems ->> 1 ilike '%3%'
    ORDER BY 1;
    

    これを行うための最良の方法については、実際のデータ(行数、これらのjsonb構造の大きさなど)に大きく依存します。ただし、一般に、ilike'%3%'のような検索は、インデックスベースのメリットがあります。従来のbtreeインデックスを使用できないため、pg_trgmからオフにします。

    編集:特にコンテンツに数千の要素を含めることができる場合は、パフォーマンスが向上するはずなので、コメント内の@Abelistoのクエリの方が優れています:

    select * from test 
    where exists 
      (select 1 
       from jsonb_array_elements(content) jae(elems) 
       where elems ->> 0 = 'first 1' 
       and elems ->> 1 ilike '%3%'
      );
    


    1. MySQLエラー-SQL構文にエラーがあります

    2. PHPでさまざまなタイムゾーンの日付の保存/表示を処理する最良の方法は?

    3. Google Cloud SQLは、理由もなくディスクがいっぱいになるまでサイズを大きくします

    4. PDO ::__ Construct():サーバーがクライアントに不明な文字セット(255)を送信しました。開発者に報告してください