0
注意:正在使用m4,所以擴展了前綴字符串(m4是類似於c預處理器的宏預處理器)。Postgres散列用戶定義類型
我喜歡的類型:
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.
問題
理想情況下,我希望引擎能夠協調字符串並將其用於哈希。但是,我不挑剔。有人可以向我展示爲訪問方法散列聲明這個「運算符類」的語法。
我會期望用戶定義類型的一些默認哈希行爲。我真的會主張保持這種類型 - 即我不想擴展它,因爲我可能會定義一些更詳細的UDT。
代表超大型數據庫中的URL。對於字符串AFAIK http://www.postgresql.org/docs/7.3/static/sql-createindex.html,線性散列索引優於B樹。該頁面指出可以指定一個'func_name',它用於返回可以被索引的值。我正在使用這將允許UDT返回一個可以散列的實體(在我的情況下是URL的連接)。 – 2010-03-06 16:56:59
唔切換到B-tree工作。我想我會堅持使用B樹,因爲我可能會在主機名上使用基於範圍的掃描。不過,我仍然對訪問方法的語法感興趣。 – 2010-03-06 17:01:49
@hassan:你真的沒有使用PostgreSQL 7.3,我希望?如果是這樣,你首先要做的是獲得一個受支持的,非古老的版本。並且請注意,在大多數情況下,在今天的PostgreSQL中,btree索引的性能與散列一樣好或者更好。 – 2010-03-07 14:00:28