残念ながら、直接json
を実行する簡単な方法はありません。 9.3の同等性テスト。
9.3のjson
typeは、重複キーを持つjsonを受け入れるため(多くの実装で予想されるように)、等式演算子はありません。 {"a":1, "a":2}
かどうかは不明です {"a":1}
と「等しい」 かどうか。
9.4はjsonb
を追加します これは、重複キーをラストキーウィンベースで折りたたむため、平等が明確になります。
regress=# SELECT '{"a":1, "a":2}'::json = '{"a":1}'::json;
ERROR: operator does not exist: json = json
LINE 1: SELECT '{"a":1, "a":2}'::json = '{"a":1}'::json;
^
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
regress=# SELECT '{"a":1, "a":2}'::jsonb = '{"a":1}'::jsonb;
?column?
----------
f
(1 row)
残念ながら、これは9.3では単純にやりたいことができないことを意味します。
json
のカスタム等式演算子を作成できます -おそらく両方をテキストにキャストしてそのように比較するだけですが、それは{"a":1, "b":2}
を扱います および{"b":2, "a":1}
不平等として。
より良いオプションは、PL / V8をインストールし、V8JavaScriptエンジンのjson操作を使用して等価比較を実行することです。
json
の等式演算子を定義します 、次に、その演算子を使用して単純なbツリーopclassを定義します。どちらもSQLレベルで簡単に実行できます。CREATE OPERATOR
を参照してください。 およびCREATE OPERATOR CLASS
。
それが完了すると、GROUP BY
できるようになります 9.3のjson値。
または、9.4beta1をインストールしてjsonb
を使用することもできます 。