web-dev-qa-db-ja.com

日付列を含むpg_trgm複合インデックスを作成する方法

SELECT col1, max(date1) as max_date
FROM table
WHERE col1 ILIKE 'name'
GROUP BY col1

TYPES:ここでcol1はvarcharで、date1はtimestamp with time zone データ・タイプ。そのため、作成された拡張子CREATE EXTENSION pg_trgm

次に、次のインデックスを試し、エラーが発生しました:

1:問題:エラー:演算子クラス "gin_trgm_ops"はタイムゾーンのあるデータ型タイムスタンプを受け入れません

CREATE INDEX CONCURRENTLY trgm_table_col1_date_index
ON table 
USING gin (provider_id, date1 gin_trgm_ops);

2:問題:エラー:アクセスメソッド "gin"の演算子クラス "text_pattern_ops"が存在しません

 CREATE INDEX CONCURRENTLY trgm_table_col1_date_index
    ON table 
    USING gin (provider_id, date1 text_pattern_ops);

上記のクエリのインデックスを作成して実行を高速化するにはどうすればよいですか?どんな助けでも本当に感謝します!

編集: EXPLAIN output of current query

1
Atihska

予約語ではないクエリ例の識別子を選択してください。

_pg_trgm_モジュールは、テキストのような列のみをサポートします。 date列はおそらくテキストタイプではなく、日付タイプ(またはタイムスタンプなど)です。

やりたいことを行うには、最初に日付のようなデータをginインデックスでインデックス付けできるようにする必要があります。たとえば、_create extension btree_gin_です。

次に、インデックスを作成できます。

_create index on bar using gin (col1 gin_trgm_ops, date_column);
_

_btree_gin_はデフォルトのクラスを提供するため、date_columnの演算子クラスを提供する必要はありません。指定する演算子クラスは、それが適用される列の横にある必要があります。それらはインデックスごとではなく、列ごとです。

これはあなたの質問に答えますが、おそらくあなたの問題を解決しないことに注意してください。上記のインデックスは合法で構築できますが、クエリを高速化することはできません(col1のpg_trgm indxが行うことを超えて)。クエリをより高速に実行するためのヘルプが必要な場合は、既存のクエリのEXPLAIN (ANALYZE)および その他の情報 を表示する必要があります。

2
jjanes