17

GIN インデックスを使用したいと思いuuid[]ます (uuid の配列の効率的なメンバーシップ テストを行うため)。ただし、試してみると、PostgreSQL でエラーが発生します。

mydb=> CREATE TABLE foo (val uuid[]);
CREATE TABLE
mydb=> CREATE INDEX foo_idx ON foo USING GIN(val);
ERROR:  data type uuid[] has no default operator class for access method "gin"
HINT:  You must specify an operator class for the index or define a default operator class for the data type.

必要な演算子クラスを追加して機能させるにはどうすればよいですか?

これはタイプの同様の質問ですcitextが、提供された回答は機能しないことに注意してください。

4

2 に答える 2

30

注:これは現在標準のPostgreSQLの一部であるため、この回答は廃止されています。tbussmannの他の回答を参照してください(賛成する必要があります)。

元の答え:

これは、次の演算子クラスを使用して実行できます。

CREATE OPERATOR CLASS _uuid_ops DEFAULT 
  FOR TYPE _uuid USING gin AS 
  OPERATOR 1 &&(anyarray, anyarray), 
  OPERATOR 2 @>(anyarray, anyarray), 
  OPERATOR 3 <@(anyarray, anyarray), 
  OPERATOR 4 =(anyarray, anyarray), 
  FUNCTION 1 uuid_cmp(uuid, uuid), 
  FUNCTION 2 ginarrayextract(anyarray, internal, internal), 
  FUNCTION 3 ginqueryarrayextract(anyarray, internal, smallint, internal, internal, internal, internal), 
  FUNCTION 4 ginarrayconsistent(internal, smallint, anyarray, integer, internal, internal, internal, internal), 
  STORAGE uuid;

私を正しい方向に向けてくれたこれの功績。

関連するドキュメントはInterface extensions to indexsにあります。特に、GIN の演算子戦略と関数番号が記載されています。

于 2013-11-13T16:54:42.677 に答える