返回首页

gbase数据、南大通用产品文档:GBase8sSQL 不透明数据类型

更新日期:2024年09月11日

不透明数据类型是用户定义的数据类型,可以与 GBase 8s 内置数据类型相同的方式
使用。不透明数据类型允许您为数据库应用程序定义新的数据类型。

不透明数据类型是完全封装的;数据库服务器不了解不透明数据类型的内部格式。因
此,数据库服务器无法对如何访问具有不透明数据类型的列进行假设。数据库开发人员定
义了一个数据结构。它保存了不透明类型的信息和支持功能,告诉数据库服务器如何访问
此数据结构。

可以通过以下两种方式之一从 GBase 8s ESQL/C 应用程序访问不透明数据类型的值:

在外部格式中,作为字符字符串

数据库服务器通过不透明数据类型的输入和输出支持功能,在客户端应用程序和数据
库服务器之间传输外部格式。

在内部格式中,作为外部编程语言(C)中的数据结构

数据库服务器通过不透明数据类型的结束和发送支持功能,在客户端应用程序和数据
库服务器之间传输内部格式。

下表显示了可用于访问不透明数据类型的 GBase 8s ESQL/C 数据类型。

GBase 8s 数据类型
ESQL/C 主机变量
不透明数据类型的外部格式
lvarchar 主机变量

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 256 -
不透明数据类型的内部格式
fixed binary 主机变量
var binary 主机变量

本节使用名为 circle 的不透明数据类型演示 GBase 8s ESQL/Clvarchar 和 fixed
binary 主机变量如何访问不透明数据类型。此数据类型包括 x,y 坐标,表示圆的中心半径
值。下图显示了 circle 数据类型的内部数据结构。

图 1. 圆不透明数据类型的内部数据结构

typedef struct
{
double x;
double y;
} point_t;

typedef struct
{
point_t center;
double radius;
} circle_t;

下图显示了数据库中注册 circle 数据类型及其输入、输出、发送和接收支持函数的
SQL 语句。

图 2. 注册 circle 不透明数据类型

CREATE OPAQUE TYPE circle (INTERNALLENGTH = 24,
ALIGNMENT = 4);

CREATE FUNCTION circle_in(c_in lvarchar) RETURNS circle
EXTERNAL NAME '/usr/lib/circle.so(circle_input)'
LANGUAGE C;

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 257 -
CREATE IMPLICIT CAST (lvarchar AS circle WITH circle_in);

CREATE FUNCTION circle_out(c_out circle) RETURNS lvarchar
EXTERNAL NAME '/usr/lib/circle.so(circle_output)'
LANGUAGE C;
CREATE IMPLICIT CAST (circle AS lvarchar WITH circle_out);

CREATE FUNCTION circle_rcv(c_rcv sendrcv) RETURNS circle
EXTERNAL NAME '/usr/lib/circle.so(circle_receive)'
LANGUAGE C;
CREATE IMPLICIT CAST (sendrcv AS circle WITH circle_rcv);

CREATE FUNCTION circle_snd(c_snd circle) RETURNS sendrcv
EXTERNAL NAME '/usr/lib/circle.so(circle_send)'
LANGUAGE C;
CREATE IMPLICIT CAST (circle AS sendrcv WITH circle_snd);

CREATE FUNCTION radius(circle) RETURNS FLOAT
EXTERNAL NAME '/usr/lib/circle.so'
LANGUAGE C;

假设 circle 数据类型的输入和输出函数定义了下图所示的外部格式。

图 3. circle Opaque 数据类型的外部格式


下图显示了创建和插入多行到 circle_tab 表的 SQL 语句,它具有 circle 类型的列。


图 4. 创建具有 circle 不透明数据类型的列


GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 258 -
CREATE TABLE circle_tab (circle_col circle);
INSERT INTO circle_tab VALUES ('(12.00, 16.00, 13.00)');
INSERT INTO circle_tab VALUES ('(6.5, 8.0, 9.0)');

使用 oncheck -cd 和 oncheck -cD 命令检查每页的一致性。
使用 oncheck -cd -y 或 oncheck
-cD -y 命令修复其不一致性。
语法:

oncheck -cd 选项从指定数据库、
表、
分片或多个分片
(碎片)
的 tblspace 中读取 blobpages
和 sbpages 除外的所有页,并检查每页的一致性。它对照这些页检查位图页中的条目,以
验证映射。
oncheck -cD 选项执行与 oncheck -cd 相同的检查,并检查每个 blobpage 头的一致性。
oncheck -cD 选项不会比较开始时间戳记
(存储在头中)
和结束时间戳记
(存储在 blobpage
的末尾)。使用 oncheck -cD -y 选项可以清除 blobspace 中孤立的简单大对象(它可能在
跨几个日志文件执行回滚后产生)。
如果数据库包含分片表,但您未指定分片,那么 oncheck -cd 选项检查表中的所有分片。
如果您未指定表,该选项会检查数据库中的所有表。通过进行比较, oncheck -pd 选项将
显示指定页的十六进制转储,但不检查一致性。
对于 oncheck -cd 和 oncheck -cD 选项,oncheck 实用程序在检查表的索引时锁定每张表。
要修复这些页,请使用 oncheck -cd -y 或 oncheck -cD -y。
如果表在相同的 dbspace 中的多个分区上分片,那么 oncheck -cd 和 oncheck -cD 命令将
显示分区名称。以下示例显示了在相同 dbspace 中的多个分区上分片的表的典型输出:

GBase 8s 管理员参考
南大通用数据技术股份有限公司 - 312 -


当使用 oncheck -cd 或 oncheck -cD 命令,
您可以指定 frag_dbs 或 %frag_dbs 选项,
但不
能都指定它们:
l 当使用 frag_dbs 选项时,该实用程序检查 frag_dbs dbspace 中所有的分片。
l 当使用 %frag_dbs 选项时,如果 PARTITION 语法在分片或表创建时被使用,该
实用程序只检查名为 frag_part 的分片。
尽管可以用 PARTITION 语法分片索引,但是不能限制只对一个分片或分区检查索引。例
如,您可以指示 oncheck -cDI my_db:my_tab,data_dbs1 or oncheck -cDI
my_db:my_tab%part1 。该检查的 D(数据)部分根据规范限制,然而 I(索引) 检查不
会被限制。
例子
以下示例检查 catalog 表中的数据行,包括简单大对象和智能大对象:
oncheck -cD superstores_demo:catalog
如果您指定一个单独的分片,oncheck 实用程序只单独显示该分片的头。对于分片表来说,
每个头显示了每个分片。
TBLspace data check for stores_demo:tab1
Table fragment in DBspace db1
消息
如果 oncheck 实用程序未找到不一致性,那么对于其检查的每张表,它显示类似于下行的
头:
TBLSPACE data check for stores_demo:customer
如果 oncheck 实用程序找到不一致性,它显示类似如下的消息:
BAD PAGE 2:28: pg_addr 2:28 != bp-> bf_pagenum 2:69
物理地址 2:28 表示 chunk 号 2 的页 28 。
如果使用 DataBlade 模块提供的存取方法的索引无法找到存取方法,那么您接收到以下信
息:
-9845 Access method access_method_name does not exist in database.
Ensure that the DataBlade installation was successful.
参考
要监视 blobspace blobpage ,请参阅 oncheck -pB:显示 blobspace 统计信息。

GBase 8s 管理员参考
南大通用数据技术股份有限公司 - 313 -

功能
网络写操作超时时间。
表6- 49 参数值范围说明表(单位为秒)
默认值
最小值
最大值
1000000
0
1000000

GBase 8a MPP Cluster 产品手册
6 附录
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
1566