ドキュメントのとおり、テーブルのJSON列にインデックスを追加する必要があります。以下のようなクエリを実行しています。
CREATE INDEX idxgin ON api USING gin (jdoc);
次のエラーが発生します。
エラー:データ型jsonには、アクセス方法 "gin"のデフォルトの演算子クラスがありません
ヒント:インデックスの演算子クラスを指定するか、データ型のデフォルトの演算子クラスを定義する必要があります。
documentation のリンクは次のとおりです。
GiN(一般化された逆インデックス)は逆インデックスであり、キーごとに1つのインデックスエントリのみを持ち、インデックスエントリに同じ値を持つすべてのキー行のマッピング情報(投稿リスト)を格納する構造です。 postgreSQLでは、キーはインデックスエントリに保存され、キーのマッピング情報は投稿ツリーに保存されます。索引エントリと投稿ツリーを検索するには、Bツリーを使用します。したがって、GINは、インデックスが行の多くの値(インデックス配列、ドキュメントなど)にマッピングする必要がある場合に役立ちます。
GINインデックスを作成する前に、あなたはいくつかの間違いをしていると思います。ここに見られるように postgresql GIN pg_trgm default operator class
GIN(一般化された逆索引)を作成するには、構文はそのようにする必要があります
CREATE INDEX name ON table USING gin(column);
GIN(Generalized Inverted Index)ベースのインデックスを作成します。列はtsvectorタイプでなければなりません。
デフォルトの演算子クラスjsonb_opsは、存在演算子(?、?&、? |)と包含演算子(@>)をサポートしています。また、jsonb_path_opsは包含演算子のみをサポートします。したがって、GINインデックスは、特定のキーまたはKey-Valueを持つもののみを検索できます。
JSONBの->>演算子を使用すると、PostgreSQLは操作の処理にBツリーまたはハッシュインデックスを使用できます。 ->> oeratorは、指定された属性の値をテキスト形式で返します。 PostgreSQLは、比較オペランドとしてテキスト結果のインデックスを使用できます。 GINインデックスは、GIN jsonb演算子クラスで使用できます。
Json演算子を表示するには ここ
JSONはjson検証済みのテキストタイプです。テキストにシリアル化されたJavaScriptオブジェクトです。インデックスを作成することはできません。索引付けできるのはデータのみです。そのテキストデータを作成するために、それを私たちが理解できる形式に移動します。
Jsonbでそのタイプ。 jdoc
をJSONからJSONBに変換し、
ALTER TABLE api
ALTER COLUMN jdoc
SET DATA TYPE jsonb USING jdoc::jsonb;
これで、上記の正確なクエリが機能します。
これも機能しているようです:CREATE INDEX idxgin ON api USING gin ((jdoc::jsonb));