HighGo Database中的seg模块

📅 发布时间:2026/7/13 6:06:29 👁️ 浏览次数:
HighGo Database中的seg模块
文章目录文档用途详细信息文档用途seg模块提供了一种数据类型seg它用于表示线段或者浮点区间。seg可以表示区间端点中的不确定性这使得它在表示实验测量的数据时特别有用。详细信息进行几何学测量时由于不确定性和随机性测量值可能是表示特定条件的区间例如一个温度范围区间。举个例子进行几何学测量时我们把使用仪器测出的值放到数据库中。当以后再从数据库中取出这个值时得到的结果可能会出现差异。首先创建扩展highgo# create extension seg;CREATEEXTENSION假设当时存入数据库中几个精确的高度值再次查询时得到的值的精确度可能会不同。highgo# create table measurement(height float8);CREATETABLEhighgo# insert into measurement values(4.30);INSERT01highgo# insert into measurement values(4.56);INSERT01highgo# select * from measurement;height--------4.34.56(2rows)值得注意的是在测量学领域里4.30和4.3可能表示的是截然不同的意义。4.30可能被包含于4.3这个区间之内所以通常我们不希望这些不同的数据项看起来是相同的。此时如果使用seg模块提供的seg数据类型就可以记录带有任意可变精度的区间。这是非常有用的每个数据元素会记录它自己的精度。举例如下用seg数据类型表示带精度的pH值区间highgo# select 3.25 .. 3.50 :: seg as pH;pH--------------3.25..3.50(1row)在seg这种数据类型中一个区间的外部表达是一个或两个浮点数中间使用 “…” 或 “…” 分隔。也可以使用一个中心点加上或减去一个偏差值的方式例如‘5±2’。作为seg的一种完整性检查如果区间的下界比上界大会导致报错。例如 “10 … 2”highgo# select 10 .. 2 :: seg as rank; ERROR: 22023: swapped boundaries: 10 is greater than 2 LINE 1: select 10 .. 2 :: seg as rank; ^ seg值被内部存储为32位浮点数对。这意味着超过7位有效数字的数会被截断,有7位或7位以下有效数字的数会保持原有的精度。 highgo# select 3.1415926535 .. 3.572729128219 :: seg as measurement; measurement -------------------- 3.14159 .. 3.57273 (1 row)如果查询返回了0.00我们需要明确的是尾部的零不是人工设置的而是反映了原始数据的精度。数字中开头部分的0不影响精度。例如值0.00045会被认为只有两位有效数字。还有一个需要注意的问题是将±转换成常规范围的机制在确定边界的有效位数时并不完全准确。highgo# select 4(-)2 :: seg as seg;seg--------2..6(1row)highgo# select 10(-)1 :: seg as range;range--------------9.0..1.1e1(1row)可以看到第二次查询的结果转换后的边界有效位数会增加。