代码之家  ›  专栏  ›  技术社区  ›  Hassan Syed

postgres散列用户定义类型

  •  0
  • Hassan Syed  · 技术社区  · 14 年前

    注: M4正在使用,因此扩展了带前缀的字符串(M4是一个类似于C预处理器的宏预处理器)。

    我的Type:

    CREATE TYPE UrlPair AS (                                                      
        HostName        varchar( _LIMIT_HOSTNAME ),                               
        ScriptName      varchar( _LIMIT_SCRIPTNAME )                              
    );
    

    用于

    CREATE TABLE SymbolTable_UrlPair (
        Symbol          _BIG_SYMBOL_SERIAL_TYPE     PRIMARY KEY,
        UrlPair         UrlPair                     
    );
    

    带索引

    CREATE INDEX SymbolTable_UrlPair_UrlPair 
        ON SymbolTable_UrlPair USING hash (UrlPair);
    

    给予:

    psql:script:32: ERROR:  data type urlpair has no default operator class 
    for access method "hash"
    
    HINT:  You must specify an operator class for the index or define a default 
    operator class for the data type.
    

    问题

    理想情况下,我希望引擎将字符串浓缩并将其用于散列。不过,我并不挑剔。有人能告诉我为访问方法散列声明这个“operator类”的语法吗?

    我本以为用户定义的类型会有一些默认的散列行为。我真的希望保留这个类型——也就是说,我不想扩展它,因为我可能会定义一些更详细的udt。

    1 回复  |  直到 14 年前
        1
  •  1
  •   Frank Heikens    14 年前

    散列和散列索引是两个不同的东西。哈希索引不支持多列索引,这可能是问题所在,您的类型urlpair是多值的。

    btree索引有什么问题?有什么问题需要解决?