[解決済み】新しいPostgreSQL JSONデータ型内のフィールドを使用してクエリを実行するにはどうすればよいですか?
質問
PostgreSQL 9.2 の新しい JSON 関数について、ドキュメントやサンプルを探しています。
具体的には、一連のJSONレコードが与えられた場合。
[
{name: "Toby", occupation: "Software Engineer"},
{name: "Zaphod", occupation: "Galactic President"}
]
名前でレコードを検索するSQLはどのように書けばいいのでしょうか?
バニラSQLで。
SELECT * from json_data WHERE "name" = "Toby"
公式の開発マニュアルはかなりまばらです。
- http://www.postgresql.org/docs/devel/static/datatype-json.html
- http://www.postgresql.org/docs/devel/static/functions-json.html
アップデートI
をまとめました。 PostgreSQL 9.2 で現在可能なことを詳細に説明した gist . いくつかのカスタム関数を使用すると、次のようなことが可能になります。
SELECT id, json_string(data,'name') FROM things
WHERE json_string(data,'name') LIKE 'G%';
アップデート II
JSON関数を独自のプロジェクトに移動しました。
PostSQL - PostgreSQLとPL/v8を全く素晴らしいJSONドキュメントストアに変換するための関数群です。
解決するには?
ポストグレス9.2
引用 pgsql-hackers メーリングリストの Andrew Dunstan さん。 :
<ブロッククオートある段階では、json処理も行われるかもしれません。 を生成する) 関数がありますが、9.2 ではありません。
しかし、PLV8であなたの問題を解決するような実装例を提供することを妨げるものではありません。(リンクは現在無効になっています。 PLV8 その代わりに)
ポストグレス9.3
json-processingを追加するための新しい関数と演算子を提供します。
の答えは オリジナルクエスチョン をPostgres 9.3に追加しました。
SELECT *
FROM json_array_elements(
'[{"name": "Toby", "occupation": "Software Engineer"},
{"name": "Zaphod", "occupation": "Galactic President"} ]'
) AS elem
WHERE elem->>'name' = 'Toby';
高度な例です。
大きなテーブルでは、パフォーマンスを向上させるためにエクスプレッションインデックスを追加することができます。
ポストグレス9.4
追加
jsonb
(b は "binary"、値は Postgres ネイティブの型として保存されます)、さらに多くの機能が
どちらも
という型があります。上記の式インデックスに加え
jsonb
もサポートしています。
GIN、btree、ハッシュの各インデックス
GINはこれらの中で最も強力なものです。
-
のマニュアルがあります。
json
とjsonb
データ型 と 機能 . - Postgres Wiki の pg 9.4 の JSONB について
マニュアルには、こう書かれています。
一般的には ほとんどのアプリケーションは、JSON データを
jsonb
ただし、レガシーなものなど、かなり特殊なニーズがある場合はこの限りではありません。 オブジェクトのキーの順序に関する仮定。
太字強調は私です。
GINインデックスの一般的な改善によるパフォーマンス上のメリット。
ポストグレス9.5
完了
jsonb
関数と演算子で構成されています。を操作するための関数を追加する。
jsonb
をその場で、表示することができます。
関連
-
[解決済み】BULK INSERTで「予期せぬファイルの終了」エラーが発生したROWを特定する?
-
[解決済み] INSERT ステートメントが FOREIGN KEY 制約と競合する - SQL Server
-
[解決済み] PostgreSQL - json 型の等値演算子を識別できませんでした。
-
[解決済み] 列名または提供された値の数がテーブル定義と一致しません。
-
[解決済み] ORA-01821: ISO 8601 のローカルタイム付き日付のフォーマットが認識されないエラー
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] SQL Server の DateTime データ型から日付だけを返す方法
-
[解決済み] Chromeを使用してASP.NET Web APIがXMLの代わりにJSONを返すようにするにはどうすればよいですか?
-
[解決済み】新しいPostgreSQL JSONデータ型内のフィールドを変更するにはどうすればよいですか?
-
[解決済み] JSON型内の配列要素を問い合わせる
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] varchar 値 'simple, ' をデータ型 int に変換する際に変換に失敗しました。
-
[解決済み】Postgresのエラー。式として使用されるサブクエリによって返される複数の行
-
[解決済み】BULK INSERTで「予期せぬファイルの終了」エラーが発生したROWを特定する?
-
[解決済み】INTERSECTとINNER JOINは根本的に違うのか?[重複している]
-
[解決済み] pg_restoreです。[archiver] 入力ファイルはテキスト形式のダンプであるように見えます。psql を使用してください。
-
[解決済み] SQL Server - 'RETURN'付近の、条件が想定されるコンテキストで指定された、非ブール型の式。
-
[解決済み] トリガーがコンパイルエラーで作成される
-
[解決済み] VBA - ADODB.CommandTextの実行
-
[解決済み] Postgres 9.4でJSONB型のカラムに対して更新操作を実行する方法
-
[解決済み] JSON型内の配列要素を問い合わせる