2016-07-13 12 views
1

私はここ数日からpostgresを使用していますが、私は解決策を見つけようとしています。Postgresのjson配列を含むJSONbカラムに格納されたJson属性のインデックスを作成する

私はpostgres sqlを使用しています。
私はあなたの名前の詳細 とjsonb列が格納された値として、JSONの配列を持っている存在であることがわかります上記のクエリから、この

CREATE TABLE location (id location_Id, details jsonb); 

INSERT INTO location (id,details) 
VALUES (1,'[{"Slno" : 1, "value" : "Bangalore"}, 
      {"Slno" : 2, "value" : "Delhi"}]'); 

INSERT INTO location (id,details) 
VALUES (2,'[{"Slno" : 5, "value" : "Chennai"}]'); 

のようなものです表を持っています。 データは、何らかの要件のためにこのように格納されます。

ここでは、jsonbにあるSlnoプロパティのインデックスを作成します。
カラム値。

誰かが と非常に役に立ちますので、この解決方法を見つけるのを手伝ってもらえますか?

CREATE INDEX locind ON location USING GIN (details jsonb_path_ops); 

あなたが必要な場合:それはむしろ全体の属性のために、単一のJSONプロパティのインデックスではありませんが、あなたが望むようにあなたが検索を実行するためにそれを使用することができます

おかげ

答えて

0

@>(含む)以外の操作の索引は、jsonb_path_opsを省略します。これにより、インデックスが大きくなり、遅くなります。

今、あなたは、インデックスを使用してプロパティを検索することができます。

EXPLAIN (VERBOSE) SELECT id FROM location WHERE details @> '[{"Slno" : 1}]'; 

           QUERY PLAN 
------------------------------------------------------------------------- 
Bitmap Heap Scan on laurenz.location (cost=8.00..12.01 rows=1 width=4) 
    Output: id 
    Recheck Cond: (location.details @> '[{"Slno": 1}]'::jsonb) 
    -> Bitmap Index Scan on locind (cost=0.00..8.00 rows=1 width=0) 
     Index Cond: (location.details @> '[{"Slno": 1}]'::jsonb) 
(5 rows) 
+0

を投稿いただきありがとうございます。 SlNoプロパティだけでインデックスを作成することはできません。 – sumanth

+0

Slno属性のインデックスを作成することを意味します。 – sumanth

+0

いいえ、私が説明したインデックスには何が欠けていますか? –

関連する問題