返回首页

gbase数据、南大通用产品文档:GBase8s演示数据库

更新日期:2024年09月11日

您可以练习将 DB-Access 与演示数据库配合使用。
如果使用 GBase 8s 演示数据库,那么可以添加、删除或更改提供的数据和脚本。还可以
将数据库复原为其原始状态。
您可以配置以下演示数据库:
l
stores_demo 数据库举例说明了具有关于虚拟批发体育用品分销商的表以及示例中使
用的其他表的关系模式。包含电力使用量和地理位置的表举例说明了时间系列和空间
信息。 GBase 8s 手册中的许多示例基于 stores_demo 数据库。
l
superstores_demo 数据库举例说明了对象关系模式。superstores_demo 数据库包含
扩展数据类型、类型和表继承以及用户定义的例程的示例。
用于安装演示数据库的脚本位于 $GBS_HOME/bin 目录(在 UNIX™ 上)。
某些操作系统要求您具有运行 SQL 命令文件的执行许可权,在 DB-Access 中打开这些文
件或其内容的读许可权,或具有保存修改过的文件或新文件的写许可权。使用 UNIX
chmod
命令可允许执行初始化脚本所安装的 SQL 文件。
演示脚本是针对缺省语言环境设计的。如果您使用的是非缺省语言环境(例如
en_us.utf8 ),那么一些诸如 SET COLLATION 语句的功能可能不能正常发挥作用。

使用“连接管理”功能,您可以新建、修改、删除数据库连接。

GBaseDataStudio 管理工具手册
- 10 -
南大通用数据技术股份有限公司

用户可以定义他们自己的范围类型。
这样做最常见的原因是为了使用内建范围类型中没
有提供的subtype 上的范围。例如,要创建一个subtype float8 的范围类型:
gbase=# CREATE TYPE floatrange AS RANGE ( subtype = float8,subtype_diff =
float8mi);
CREATE TYPE
gbase=# SELECT '[1.234, 5.678]'::floatrange;
[1.234,5.678]
因为float8 没有有意义的“步长”
,我们在这个例子中没有定义一个正规化函数。
定义自己的范围类型也允许你指定使用一个不同的子类型B-树操作符类或者集合,以
便更改排序顺序来决定哪些值会落入到给定的范围中。
如果subtype 被认为是具有离散值而不是连续值,CREATE TYPE 命令应当指定一个
canonical 函数。正规化函数接收一个输入的范围值,并且必须返回一个可能具有不同界限
和格式的等价的范围值。对于两个表示相同值集合的范围(例如[1, 7]和[1, 8))
,正规的输出
必须一样。
选择哪一种表达作为正规的没有关系,
只要两个具有不同格式的等价值总是能被
映射到具有相同格式的相同值就行。除了调整包含/排除界限格式外,假使期望的补偿比
subtype 能够存储的要大,一个正规化函数可能会舍入边界值。例如,一个timestamp 之上
的范围类型可能被定义为具有一个一小时的步长,这样正规化函数可能需要对不是一小时
的倍数的界限进行舍入,或者可能直接抛出一个错误。
另外,任何打算要和GiST 或SP-GiST 索引一起使用的范围类型应当定一个subtype
差异或subtype_diff 函数(没有subtype_diff 时索引仍然能工作,但是可能效率不如提供了
差异函数时高)
。subtype 差异函数采用两个subtype 输入值,并且返回表示为一个float8
值的差
(即X 减Y)

在我们上面的例子中,
可以使用常规float8 减法操作符
之下的函数。
但是对于任何其他subtype,可能需要某种类型转换。还可能需要一些关于如何把差异表达
为数字的创新型想法。为了最大的可扩展性,subtype_diff 函数应该同意选中的操作符类和

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
92
排序规则所蕴含的排序顺序,
也就是说,
只要它的第一个参数根据排序顺序大于第二个参数,
它的结果就应该是正值。
示例
gbase=# CREATE FUNCTION time_subtype_diff(x time, y time) RETURNS float8 AS
'SELECT EXTRACT(EPOCH FROM (x - y))' LANGUAGE sql STRICT IMMUTABLE;
CREATE FUNCTION
gbase=# CREATE TYPE timerange AS RANGE ( subtype = time,subtype_diff =
time_subtype_diff);
CREATE FUNCTION
gbase=# SELECT '[11:10, 23:00]'::timerange;
[11:10:00,23:00:00]
更多关于创建范围类型的信息,参考14.94 CREATE TYPE。