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

パターンに一致する値を含むオブジェクトのJSON配列を検索します

    組み込みのjsonbはありません 演算子も、この種のフィルターを直接(まだ)サポートしているインデックスもありません。

    EXISTSをお勧めします 半参加:

    SELECT t.*
    FROM   tbl t
    WHERE  EXISTS (
       SELECT FROM jsonb_array_elements(t.jsoncol) elem
       WHERE  elem->>'value' LIKE '%ba%'
       );
    

    冗長な評価と最終的なDISTINCTを回避します ステップでは、プレーンな CROSS JOINで個別の行を取得する必要があります 。

    それでも十分な速度が得られない場合は、特定のタイプのクエリに対してより洗練された特殊なソリューションとして、<の行ごとに一意の値の連結文字列(検索パターンに干渉しない区切り文字を使用)を抽出する方法があります。 code> IMMUTABLE 関数を作成し、関数式にトリグラムGINインデックスを作成し、クエリで同じ式を使用します。

    関連:

    • より大きな演算子を使用してjsonb配列でネストされた値を検索します
    • レコードのJSONB配列でキーを含む行を検索する
    • 配列サブオブジェクトにPostgresJSONBインデックスを作成する

    余談ですが、 jsonb 値は実際には例のように見えます。多くのノイズをトリミングして保存するだけです。

    [
       {"foo":"bar"},
       {"biz":"baz"},
       {"beep":"boop"}
    ]
    


    1. sysdateを使用したto_date関数

    2. 1つのステートメントで複数の(3+)テーブルを結合する方法

    3. 名前に角かっこが含まれているSQLServerの名前を変更するにはどうすればよいですか?

    4. SQL、テーブル構造を更新する方法