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);