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

新しいPostgreSQLJSONデータ型内のフィールドを使用してクエリを実行するにはどうすればよいですか?

    Postgres 9.2

    AndrewDunstanをpgsql-hackersリストに引用します:

    ある段階で、(jsonを生成するのではなく)いくつかのjson処理機能が存在する可能性がありますが、9.2には存在しません。

    彼があなたの問題を解決するはずのPLV8の実装例を提供することを妨げません。 (リンクは現在無効です。代わりに最新のPLV8を参照してください。)

    Postgres 9.3

    「json-processing」を追加するための新しい関数と演算子の武器を提供します。

    • 新しいJSON機能に関するマニュアル。
    • 9.3ページの新機能に関するPostgresWiki。

    元の質問への回答 Postgres 9.3の場合:

    SELECT *
    FROM   json_array_elements(
      '[{"name": "Toby", "occupation": "Software Engineer"},
        {"name": "Zaphod", "occupation": "Galactic President"} ]'
      ) AS elem
    WHERE elem->>'name' = 'Toby';
    

    高度な例:

    • JSONデータ型のレコードのネストされた配列とのクエリの組み合わせ

    大きなテーブルの場合は、パフォーマンスを向上させるために式インデックスを追加することをお勧めします。

    • JSON配列内の要素を検索するためのインデックス

    Postgres 9.4

    jsonbを追加します (「バイナリ」の場合はb、値はネイティブのPostgresタイプとして保存されます)両方のさらに多くの機能 タイプ。上記の式インデックスに加えて、jsonb GIN、btree、ハッシュインデックスもサポートしており、GINはこれらの中で最も強力です。

    • jsonのマニュアル およびjsonb データ型と関数。
    • 9.4ページのJSONBに関するPostgresWiki

    マニュアルは、次のことを示唆しているところまで行きます:

    一般に、ほとんどのアプリケーションはJSONデータをjsonbとして保存することを好むはずです 、オブジェクトキーの順序に関するレガシーの仮定など、非常に特殊なニーズがない限り。

    大胆な強調鉱山。

    パフォーマンスは、GINインデックスの一般的な改善から恩恵を受けます。

    Postgres 9.5

    完全なjsonb 関数と演算子。 jsonbを操作する関数を追加します 所定の位置に表示されます。

    • Postgres9.5のリリースノートの主な朗報。


    1. MySQLで空の値を許可する一意の制約

    2. ある範囲の日付の間の日付の取得

    3. SQLServerデータベースの複数のテーブルの主キー制約の名前を変更する方法-SQLServer/TSQLチュートリアルパート64

    4. MySQLは、group by句の一部ではない列を選択できるようにすることで標準を破っていますか?