Postgresql &引用;找不到哈希运算符“的哈希函数”;在我的用户定义类型中

Postgresql &引用;找不到哈希运算符“的哈希函数”;在我的用户定义类型中,postgresql,Postgresql,我有自己的用户定义类型,命名为MYUDT,在我的postgresql-9.3.4(CentOS 6.5版)上有运算符类 =、=、所需的运算符和函数都在那里,它可以与嵌套循环/排序合并联接一起工作,但是,哈希联接不起作用 EXPLAIN SELECT * FROM MY_TABLE1 A, MY_TABLE2 B WHERE A.C1=B.C1; QUERY PLAN

我有自己的
用户定义类型
,命名为
MYUDT
,在我的postgresql-9.3.4(CentOS 6.5版)上有运算符类

=
=
所需的运算符和函数都在那里,它可以与
嵌套循环
/
排序合并
联接一起工作,但是,
哈希联接
不起作用

EXPLAIN SELECT * FROM MY_TABLE1 A, MY_TABLE2 B WHERE A.C1=B.C1;
                                         QUERY PLAN                                          
---------------------------------------------------------------------------------------------
 Hash Join  (cost=10000000012.30..10000000026.38 rows=9 width=500)
   Hash Cond: (b.C1= a.C1)
   ->  Seq Scan on MY_TABLE2 b  (cost=10000000000.00..10000000012.90 rows=290 width=250)
   ->  Hash  (cost=12.22..12.22 rows=6 width=250)
         ->  Index Scan using IDX_MYUDT on MY_TABLE1 a  (cost=0.13..12.22 rows=6 width=250)
(5 rows)

SELECT * FROM MY_TABLE1 A, MY_TABLE2 B WHERE A.C1=B.C1;
ERROR:  could not find hash function for hash operator 610980
我碰巧听说它需要创建
散列运算符类
,我就是这么做的

CREATE FUNCTION MYUDT_hash(MYUDT)
RETURNS int LANGUAGE internal AS 'hashtext' IMMUTABLE;

CREATE OPERATOR CLASS MYUDT_HASH_OPS
DEFAULT FOR TYPE MYUDT USING hash AS
FUNCTION 1 MYUDT_hash(aria128);

但还是不行,我需要这个。我错过了什么?任何建议都将不胜感激。

使用哈希运算符类中的
=
运算符函数,它确实有效。请参阅:
EXPLAIN SELECT * FROM MY_TABLE1 A, MY_TABLE2 B WHERE A.C1=B.C1;
                                         QUERY PLAN                                          
---------------------------------------------------------------------------------------------
 Hash Join  (cost=10000000012.30..10000000026.38 rows=9 width=500)
   Hash Cond: (b.C1= a.C1)
   ->  Seq Scan on MY_TABLE2 b  (cost=10000000000.00..10000000012.90 rows=290 width=250)
   ->  Hash  (cost=12.22..12.22 rows=6 width=250)
         ->  Index Scan using IDX_MYUDT on MY_TABLE1 a  (cost=0.13..12.22 rows=6 width=250)
(5 rows)

SELECT * FROM MY_TABLE1 A, MY_TABLE2 B WHERE A.C1=B.C1;
ERROR:  could not find hash function for hash operator 610980
CREATE FUNCTION MYUDT_hash(MYUDT)
RETURNS int LANGUAGE internal AS 'hashtext' IMMUTABLE;

CREATE OPERATOR CLASS MYUDT_HASH_OPS
DEFAULT FOR TYPE MYUDT USING hash AS
FUNCTION 1 MYUDT_hash(aria128);