W3Cschool
恭喜您成為首批注冊(cè)用戶(hù)
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
這個(gè)模塊實(shí)現(xiàn)了一種數(shù)據(jù)類(lèi)型cube
來(lái)表示多維立方體。
此模塊被視為“trusted”,也就是說(shuō),它可以由在當(dāng)前數(shù)據(jù)庫(kù)上具有 CREATE
權(quán)限的非超級(jí)用戶(hù)安裝。
表 F.2展示了cube
類(lèi)型有效的外部表示。x
、y
等表示浮點(diǎn)數(shù)。
表 F.2. 立方體外部表示
外部語(yǔ)法 | 含義 |
---|---|
|
一個(gè)一維點(diǎn)(或者長(zhǎng)度為零的一維區(qū)間) |
(
|
同上 |
|
n-維空間中的一個(gè)點(diǎn),內(nèi)部表示為一個(gè)零容積立方體 |
(
|
同上 |
(
|
開(kāi)始于x 并且結(jié)束于y 的一個(gè)一維區(qū)間,反之亦然。順序并不重要 |
[(
|
同上 |
(
|
一個(gè) n-維立方體,用它的對(duì)角頂點(diǎn)對(duì)表示 |
[(
|
同上 |
一個(gè)立方體的對(duì)角錄入的順序無(wú)關(guān)緊要。如果需要?jiǎng)?chuàng)建一種統(tǒng)一的“左下 — 右上”的內(nèi)部表示,cube
函數(shù)會(huì)自動(dòng)地交換值。當(dāng)角重合時(shí),cube
只存儲(chǔ)一個(gè)角和一個(gè)“is point”標(biāo)志,這樣避免浪費(fèi)空間。
輸入中的空白空間會(huì)被忽略,因此[(
與x
),(y
)][ (
相同。x
), ( y
) ]
值在內(nèi)部被存儲(chǔ)為 64 位浮點(diǎn)數(shù)。這意味著超過(guò) 16 位有效位的數(shù)字將被截?cái)唷?/p>
表 F.3展示了為類(lèi)型cube
提供的專(zhuān)用的操作符。
表 F.3. 立方體操作符
操作符 描述 |
---|
立方體是否有重疊? |
第一個(gè)立方體是否包含第二個(gè)立方體? |
第一個(gè)立方體是否包含在第二個(gè)立方體里面? |
提取立方體的第 |
提取立方體的第 |
計(jì)算兩個(gè)立方體之間的歐幾里德距離. |
計(jì)算兩個(gè)立方體之間的直線(L-1 度量)距離。 |
計(jì)算兩個(gè)立方體之間的切比雪夫(L-inf 度量)距離. |
(在 PostgreSQL 8.2 之前,包含操作符@>
和<@
分別被稱(chēng)為@
和~
。這些名稱(chēng)仍然可用,但是已經(jīng)被廢棄并且最終將會(huì)退休。注意舊的名字與之前核心幾何數(shù)據(jù)類(lèi)型遵循的習(xí)慣相反?。?/p>
除上述操作符外,表 9.1 中顯示的常用比較操作符也可用于cube
類(lèi)型。 這些操作符首先比較第一個(gè)坐標(biāo),如果它們相等再比較第二個(gè)坐標(biāo)等等。 它們主要為支持cube
的
b樹(shù)索引操作符類(lèi)而存在,這類(lèi)操作符對(duì)支持cube
列上的 UNIQUE 約束等很有用。 否則,這種排序沒(méi)有太大的實(shí)際作用。
cube
模塊也為cube
值提供了一個(gè) GiST 索引操作符類(lèi)。cube
GiST 索引可以被用于在WHERE
子句中通過(guò)=
、&&
、@>
以及
<@
操作符來(lái)搜索值。
此外,cube
GiST 索引可以被用在ORDER BY
子句中通過(guò)度量操作符<->
、<#>
和<=>
來(lái)查找最近鄰。例如, 3-D 點(diǎn)(0.5, 0.5, 0.5)的最近鄰可以用下面的查詢(xún)很快地找到:
SELECT c FROM test ORDER BY c <-> cube(array[0.5,0.5,0.5]) LIMIT 1;
也可以用這種方式使用~>
操作符來(lái)高效地檢索通過(guò)選定坐標(biāo)排序后的前幾個(gè)值。例如,可以用下面的查詢(xún)得到通過(guò)第一個(gè)坐標(biāo)(左下角)升序排列后的前幾個(gè)立方體:
SELECT c FROM test ORDER BY c ~> 1 LIMIT 5;
以及得到通過(guò)右上角第一個(gè)坐標(biāo)降序排列后的 2-D 立方體:
SELECT c FROM test ORDER BY c ~> 3 DESC LIMIT 5;
表 F.4展示了可用的函數(shù)。
表 F.4. 立方體函數(shù)
函數(shù) 描述 示例 |
---|
制作一個(gè)一維立方體,其兩個(gè)坐標(biāo)都是相同的。 |
制作一個(gè)一維立方體。 |
使用數(shù)組定義的坐標(biāo)制作一個(gè)零值的立方體 |
用由兩個(gè)數(shù)組定義的右上和左下坐標(biāo)制造一個(gè)立方體,兩個(gè)數(shù)組必須等長(zhǎng)。 |
在一個(gè)現(xiàn)有的立方體上增加一維來(lái)制造一個(gè)新立方體,對(duì)新坐標(biāo)的各個(gè)端點(diǎn)都采用相同的值。這可以用于從計(jì)算得到的值逐漸地構(gòu)建立方體。 |
在一個(gè)現(xiàn)有的立方體上增加一維來(lái)制造一個(gè)新立方體。這可以用于從計(jì)算得到的值逐漸地構(gòu)建立方體。 |
返回該立方體的維數(shù)。 |
返回一個(gè)立方體的左下角的第 |
返回一個(gè)立方體的右上角的第 |
如果一個(gè)立方體是一個(gè)點(diǎn)則返回真,也就是兩個(gè)定義點(diǎn)相同。 |
返回兩個(gè)立方體之間的距離。如果兩個(gè)都是點(diǎn),這就是普通距離函數(shù)。 |
從一個(gè)現(xiàn)有的立方體制造一個(gè)新立方體,使用來(lái)自于一個(gè)數(shù)組的維索引列表。 它可以被用來(lái)抽取一個(gè)單一維度的端點(diǎn),或者它可以被用來(lái)去除維度,或者按照需要對(duì)它們重新排序。 |
產(chǎn)生兩個(gè)立方體的并集。 |
產(chǎn)生兩個(gè)立方體的交集。 |
用一個(gè)指定的半徑 |
我相信這個(gè)并:
select cube_union('(0,5,2),(2,3,1)', '0');
cube_union
-------------------
(0, 0, 0),(2, 5, 2)
(1 row)
不會(huì)與常識(shí)矛盾,下面的交也不會(huì)
select cube_inter('(0,-1),(1,1)', '(-2),(2)');
cube_inter
-------------
(0, 0),(1, 0)
(1 row)
在所有不同維度立方體的二元操作中,我假定低緯度的那一個(gè)要做笛卡爾投影,即為字符串表示中被省略的坐標(biāo)取零。上面的例子等同于:
cube_union('(0,5,2),(2,3,1)','(0,0,0),(0,0,0)');
cube_inter('(0,-1),(1,1)','(-2,0),(2,0)');
下列包含謂詞使用點(diǎn)語(yǔ)法,不過(guò)實(shí)際上第二個(gè)參數(shù)在內(nèi)部被表示為一個(gè)盒子。這種語(yǔ)法讓我們不必定義一種單獨(dú)的點(diǎn)類(lèi)型以及用于(盒子, 點(diǎn))謂詞的函數(shù)。
select cube_contains('(0,0),(1,1)', '0.5,0.5');
cube_contains
--------------
t
(1 row)
用法的例子可見(jiàn)回歸測(cè)試sql/cube.sql
。
為了不容易出問(wèn)題,對(duì)于立方體的維度數(shù)有 100 的限制。如果你想要更大的立方體,可以在cubedata.h
中修改。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: