intarray
模組提供許多有用的函數和運算符,用於處理不含 NULL 值的整數陣列。它也支援使用某些運算符進行索引搜尋。
如果提供的陣列包含任何 NULL 元素,所有這些操作都會拋出錯誤。
許多這些操作僅適用於一維陣列。 雖然它們會接受更多維度的輸入陣列,但這些資料會被視為儲存順序中的線性陣列。
此模組被認為是「受信任的」,也就是說,在目前的資料庫上擁有 CREATE
權限的非超級使用者可以安裝它。
intarray
函數和運算符 #intarray
模組提供的函數顯示在表 F.8中,運算符顯示在表 F.9中。
表 F.8. intarray
函數
表 F.9. intarray
運算符
運算符 描述 |
---|
陣列是否重疊(至少有一個共同的元素)? |
左側陣列是否包含右側陣列? |
左側陣列是否包含於右側陣列中? |
傳回陣列中的元素數量。 |
傳回與右側引數相符的第一個陣列元素的索引,如果沒有相符項目,則傳回 0。(與 |
將元素新增到陣列的末尾。 |
串聯陣列。 |
從陣列中移除與右側引數相符的項目。 |
從左側陣列中移除右側陣列的元素。 |
計算引數的聯集。 |
計算引數的聯集。 |
計算引數的交集。 |
陣列是否滿足查詢?(請參閱下文) |
陣列是否滿足查詢?( |
運算子 &&
、@>
和 <@
等同於 PostgreSQL 的同名內建運算子,但它們僅適用於不包含 null 值的整數陣列,而內建運算子適用於任何陣列類型。在許多情況下,這種限制使它們比內建運算子更快。
運算子 @@
和 ~~
測試陣列是否滿足查詢,該查詢表示為特殊資料類型 query_int
的值。查詢由針對陣列元素檢查的整數值組成,這些整數值可能使用運算子 &
(AND)、|
(OR) 和 !
(NOT) 進行組合。可以根據需要使用括號。例如,查詢 1&(2|3)
符合包含 1 且包含 2 或 3 的陣列。
intarray
為 &&
、@>
和 @@
運算子以及常規陣列相等性提供索引支援。
提供了兩個參數化的 GiST 索引運算子類別:gist__int_ops
(預設使用)適用於小型到中型資料集,而 gist__intbig_ops
使用更大的簽章,更適合索引大型資料集(即,包含大量不同陣列值的欄位)。該實作使用具有內建有損壓縮的 RD 樹狀資料結構。
gist__int_ops
將整數集合近似為整數範圍陣列。其可選整數參數 numranges
決定一個索引鍵中的最大範圍數。 numranges
的預設值為 100。有效值介於 1 和 253 之間。使用較大的陣列作為 GiST 索引鍵會導致更精確的搜尋(掃描較小部分的索引和更少的堆積頁面),但會增加索引大小。
gist__intbig_ops
將整數集合近似為點陣圖簽章。其可選整數參數 siglen
決定簽章長度(以位元組為單位)。預設簽章長度為 16 個位元組。簽章長度的有效值介於 1 和 2024 個位元組之間。較長的簽章會導致更精確的搜尋(掃描較小部分的索引和更少的堆積頁面),但會增加索引大小。
還有一個非預設的 GIN 運算子類別 gin__int_ops
,它支援這些運算子以及 <@
。
GiST 和 GIN 索引之間的選擇取決於 GiST 和 GIN 的相對效能特性,這些特性在其他地方進行了討論。
-- a message can be in one or more “sections”
CREATE TABLE message (mid INT PRIMARY KEY, sections INT[], ...);
-- create specialized index with signature length of 32 bytes
CREATE INDEX message_rdtree_idx ON message USING GIST (sections gist__intbig_ops (siglen = 32));
-- select messages in section 1 OR 2 - OVERLAP operator
SELECT message.mid FROM message WHERE message.sections && '{1,2}';
-- select messages in sections 1 AND 2 - CONTAINS operator
SELECT message.mid FROM message WHERE message.sections @> '{1,2}';
-- the same, using QUERY operator
SELECT message.mid FROM message WHERE message.sections @@ '1&2'::query_int;
原始碼目錄 contrib/intarray/bench
包含一個基準測試套件,可以針對已安裝的 PostgreSQL 伺服器執行。(它還需要安裝 DBD::Pg
。)若要執行
cd .../contrib/intarray/bench createdb TEST psql -c "CREATE EXTENSION intarray" TEST ./create_test.pl | psql TEST ./bench.pl
bench.pl
腳本具有許多選項,當不帶任何引數執行時會顯示這些選項。
所有工作均由 Teodor Sigaev (<teodor@sigaev.ru>
) 和 Oleg Bartunov (<oleg@sai.msu.su>
) 完成。 有關更多資訊,請參閱 http://www.sai.msu.su/~megera/postgres/gist/。 Andrey Oktyabrski 在新增功能和運算方面做了大量工作。
如果您在文件中發現任何不正確、與您使用特定功能的經驗不符或需要進一步澄清的內容,請使用此表單回報文件問題。