支援的版本:目前 (17) / 16 / 15 / 14 / 13
開發版本:devel
不支援的版本:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3

F.8. btree_gist — 具有 B 樹行為的 GiST 運算子類別 #

btree_gist 為資料類型 int2int4int8float4float8numerictimestamp with time zonetimestamp without time zonetime with time zonetime without time zonedateintervaloidmoneycharvarchartextbyteabitvarbitmacaddrmacaddr8inetcidruuidbool 和所有 enum 類型提供實作 B 樹等效行為的 GiST 索引運算子類別。

一般來說,這些運算子類別的效能不會優於等效的標準 B 樹索引方法,並且它們缺少標準 B 樹程式碼的一個主要功能:強制唯一性的能力。 然而,它們提供了一些其他功能,這些功能在使用 B 樹索引時不可用,如下所述。 此外,當需要多欄 GiST 索引時,這些運算子類別很有用,其中某些欄是只能使用 GiST 建立索引的資料類型,而其他欄只是簡單的資料類型。 最後,這些運算子類別對於 GiST 測試以及開發其他 GiST 運算子類別很有用。

除了典型的 B 樹搜尋運算子之外,btree_gist 還提供對 <>不等於)的索引支援。 這可能與排除約束結合使用,如下所述。

此外,對於具有自然距離度量的資料類型,btree_gist 定義了一個距離運算子 <->,並提供 GiST 索引支援,以使用此運算子進行最近鄰搜尋。 為 int2int4int8float4float8timestamp with time zonetimestamp without time zonetime without time zonedateintervaloidmoney 提供了距離運算子。

此模組被視為受信任的,也就是說,可以由在目前資料庫上具有 CREATE 權限的非超級使用者安裝。

F.8.1. 使用範例 #

使用 btree_gist 而不是 btree 的簡單範例

CREATE TABLE test (a int4);
-- create index
CREATE INDEX testidx ON test USING GIST (a);
-- query
SELECT * FROM test WHERE a < 10;
-- nearest-neighbor search: find the ten entries closest to "42"
SELECT *, a <-> 42 AS dist FROM test ORDER BY a <-> 42 LIMIT 10;

使用排除約束來強制執行動物園的一個籠子只能容納一種動物的規則

=> CREATE TABLE zoo (
  cage   INTEGER,
  animal TEXT,
  EXCLUDE USING GIST (cage WITH =, animal WITH <>)
);

=> INSERT INTO zoo VALUES(123, 'zebra');
INSERT 0 1
=> INSERT INTO zoo VALUES(123, 'zebra');
INSERT 0 1
=> INSERT INTO zoo VALUES(123, 'lion');
ERROR:  conflicting key value violates exclusion constraint "zoo_cage_animal_excl"
DETAIL:  Key (cage, animal)=(123, lion) conflicts with existing key (cage, animal)=(123, zebra).
=> INSERT INTO zoo VALUES(124, 'lion');
INSERT 0 1

F.8.2. 作者 #

Teodor Sigaev ()、Oleg Bartunov ()、Janko Richter () 和 Paul Jungwirth ()。 有關其他資訊,請參閱http://www.sai.msu.su/~megera/postgres/gist/

提交更正

如果您在文件中發現任何不正確、與特定功能的體驗不符或需要進一步澄清的地方,請使用此表單報告文件問題。