1 插件 cube 简介
这个模块实现了一种数据类型 cube 来表示多维立方体。
• 插件名为 cube
• 插件版本 V1.4
2 插件 cube 加载方式
create extension cube;
3 插件 cube 的参数配置
无需配置任何参数
4 插件 cube 的使用方法
1)外部表示
在下表展示了 cube 类型有效的外部表示。x、y 等表示浮点数。
一个立方体的对角录入的顺序无关紧要。如果需要创建一种统一的“左下—右上”的内部表示,cube 函数会自 动地交换值。当角重合时,cube 只存储一个角和一个“is point”标志,这样避免浪费空间。 输入中的空白空间会被忽略,因此 [(x),(y)] 与 [ ( x ), ( y ) ] 相同。
2)精度
值在内部被存储为 64 位浮点数。这意味着超过 16 位有效位的数字将被截断。
3)操作符
标量排序操作符(= 等)除了用来排序之外没有什么实际用途。这些操作符首先比较第一个坐标,如果它 们相等再比较第二个坐标等等。它们主要为支持 cube 的 b-树索引操作符类而存在,这类操作符对支持 cube 列上的 UNIQUE 约束等很有用。
cube 模块也为 cube 值提供了一个 GiST 索引操作符类。cube GiST 索引可以被用于在 WHERE 子句中通过 =、 &&、@> 以及 、 和 来查找最近邻。
例如,3-D 点 (0.5, 0.5, 0.5) 的最近邻可以用下面的查询很快地找到:
create table test (c cube);
insert into test values(cube(array[2,2,2])),(cube(array[3,3,3]));
SELECT c FROM test ORDER BY c cube(array[0.5,0.5,0.5]) LIMIT 1;
c
-----------
(2, 2, 2)
(1 row)
也可以用这种方式使用 ~> 操作符来高效地检索通过选定坐标排序后的前几个值。例如,可以用下面的查询得到 通过第一个坐标(左下角)升序排列后的前几个立方体:
SELECT c FROM test ORDER BY c ~> 1 LIMIT 5;
c
-----------
(2, 2, 2)
(3, 3, 3)
(2 rows)
以及得到通过右上角第一个坐标降序排列后的二维立方体:
SELECT c FROM test ORDER BY c ~> 3 DESC LIMIT 5;
c
-----------
(3, 3, 3)
(2, 2, 2)
(2 rows)
4)函数
5)默认值
以下为并操作:
select cube_union('(0,5,2),(2,3,1)', '0');
cube_union
-------------------
(0, 0, 0),(2, 5, 2)
(1 row)
以下为交操作:
select cube_inter('(0,-1),(1,1)', '(-2),(2)');
cube_inter
-------------
(0, 0),(1, 0)
(1 row)
在所有不同维度立方体的二元操作中,我假定低纬度的那一个要做笛卡尔投影,即为字符串表示中被省略的坐标 取零。上面的例子等同于:
cube_union('(0,5,2),(2,3,1)','(0,0,0),(0,0,0)');
cube_inter('(0,-1),(1,1)','(-2,0),(2,0)');
下列包含谓词使用点语法,不过实际上第二个参数在内部被表示为一个盒体。这种语法让我们不必定义一种单独 的点类型以及用于(盒体, 点)谓词的函数。
select cube_contains('(0,0),(1,1)', '0.5,0.5');
cube_contains
--------------
t
(1 row)
注意: 用法的例子可见回归测试 sql/cube.sql。为了不容易出问题,对于立方体的维度数有 100 的限制。如果你想要 更大的立方体,可以在 cubedata.h 中修改。
5)插件 cube 的卸载方法
drop extension cube;
6)插件 cube 升级方法
cube 扩展插件通常随着 KingbaseES 安装包一并升级。通常情况下用户无须单独升级些插件。