type uuid
DDLステートメントのSET DATA TYPE uuid
の省略形です。 。 マニュアル:
varchar_pattern_ops
はuuid
がある場合は、エラーメッセージにその旨が記載されます。 この演算子クラスを任意のインデックスで使用します。通常、より高速な並べ替え、パターンマッチング、範囲条件を有効にします。
修正するには、競合するインデックスを削除し、データ型を変更してから、特別な演算子クラスなしでインデックスを再作成します- if まだ必要です。
ただし、varchar_pattern_ops
を使用するいくつかの一般的なクエリ インデックスはデータ型uuid
で機能しなくなります varchar
の代わりに 。パターンマッチングのように:
そのようなクエリも必ず修正してください。
@fl0ckeが指摘 関連する回答:
少し違うルートをお勧めします。インデックスを削除し、データ型を変更してから 新しいインデックスを作成します-それでも役立つ場合。
DROP INDEX tbl_guid_varchar_pattern_ops_idx;
ALTER TABLE tbl ALTER COLUMN guid TYPE uuid USING guid::uuid;
CREATE INDEX tbl_guid_idx ON tbl (guid);
問題のあるインデックスを見つける方法
Postgresの最新バージョンでは、\d tbl
を使用してテーブルの既存のインデックスを取得します psqlで。
すべての完全なCREATE INDEX
を取得するには 指定されたテーブルのステートメント:
SELECT pg_get_indexdef(indexrelid) || ';' AS idx
FROM pg_index
WHERE indrelid = 'public.tbl'::regclass; -- optionally schema-qualified
varchar_pattern_ops
を使用して1つだけを取得するには :
SELECT pg_get_indexdef(i.indexrelid) || ';' AS idx
FROM pg_index i
JOIN pg_opclass o ON o.oid = ANY (i.indclass)
WHERE i.indrelid = 'public.big'::regclass
AND o.opcname = 'varchar_pattern_ops';
詳細: