2025年9月25日: PostgreSQL 18 釋出!
支援的版本: 當前 (18) / 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-tree 行為的 GiST 運算元類 #

btree_gist 提供了 GiST 索引運算元類,這些類為資料型別 int2int4int8float4float8numerictimestamp with time zonetimestamp without time zonetime with time zonetime without time zonedateintervaloidmoneycharvarchartextbyteabitvarbitmacaddrmacaddr8inetcidruuidbool 以及所有 enum 型別實現了等同於 B-tree 的行為。

總的來說,這些運算元類的效能不會超過等效的標準 B-tree 索引方法,並且它們缺少標準 B-tree 程式碼的一項主要功能:強制唯一性的能力。但是,它們提供了一些 B-tree 索引所不具備的其他功能,如下所述。此外,當需要多列 GiST 索引時,這些運算元類會很有用,其中一些列是隻能用 GiST 索引的資料型別,而其他列只是簡單的資料型別。最後,這些運算元類對於 GiST 測試以及作為開發其他 GiST 運算元類的方法很有用。

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

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

預設情況下,btree_gist 構建GiST索引時處於 已排序 模式下的 sortsupport。這通常會大大加快索引構建速度。透過在建立索引時使用 buffering 引數,仍然可以恢復到緩衝構建策略。

此模組被認為是受信任的,這意味著非超級使用者也可以在其擁有的資料庫上安裝它,前提是他們具有 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/

提交更正

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