intarray
模組提供了一系列用於操作非空整數陣列的有用函式和運算子。它還支援使用其中一些運算子進行索引搜尋。
如果提供的陣列包含任何 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-tree 資料結構。
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 在新增新函式和操作方面做了大量工作。
如果您在文件中發現任何不正確、與您對特定功能的體驗不符或需要進一步澄清的內容,請使用此表格報告文件問題。