btree_gist
為資料類型 int2
、int4
、int8
、float4
、float8
、numeric
、timestamp with time zone
、timestamp without time zone
、time with time zone
、time without time zone
、date
、interval
、oid
、money
、char
、varchar
、text
、bytea
、bit
、varbit
、macaddr
、macaddr8
、inet
、cidr
、uuid
、bool
和所有 enum
類型提供實作 B 樹等效行為的 GiST 索引運算子類別。
一般來說,這些運算子類別的效能不會優於等效的標準 B 樹索引方法,並且它們缺少標準 B 樹程式碼的一個主要功能:強制唯一性的能力。 然而,它們提供了一些其他功能,這些功能在使用 B 樹索引時不可用,如下所述。 此外,當需要多欄 GiST 索引時,這些運算子類別很有用,其中某些欄是只能使用 GiST 建立索引的資料類型,而其他欄只是簡單的資料類型。 最後,這些運算子類別對於 GiST 測試以及開發其他 GiST 運算子類別很有用。
除了典型的 B 樹搜尋運算子之外,btree_gist
還提供對 <>
(「不等於」)的索引支援。 這可能與排除約束結合使用,如下所述。
此外,對於具有自然距離度量的資料類型,btree_gist
定義了一個距離運算子 <->
,並提供 GiST 索引支援,以使用此運算子進行最近鄰搜尋。 為 int2
、int4
、int8
、float4
、float8
、timestamp with time zone
、timestamp without time zone
、time without time zone
、date
、interval
、oid
和 money
提供了距離運算子。
此模組被視為「受信任的」,也就是說,可以由在目前資料庫上具有 CREATE
權限的非超級使用者安裝。
使用 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
Teodor Sigaev (<teodor@stack.net>
)、Oleg Bartunov (<oleg@sai.msu.su>
)、Janko Richter (<jankorichter@yahoo.de>
) 和 Paul Jungwirth (<pj@illuminatedcomputing.com>
)。 有關其他資訊,請參閱http://www.sai.msu.su/~megera/postgres/gist/。
如果您在文件中發現任何不正確、與特定功能的體驗不符或需要進一步澄清的地方,請使用此表單報告文件問題。