返回首页

gbase数据、南大通用产品文档:GBase8c

更新日期:2024年09月11日

校验账本数据一致性
前提条件
数据库正常运行,并且对防篡改数据库执行了一系列增、删、改等操作,保证在查询时
段内有账本操作记录结果产生。
背景信息

账本数据库校验功能目前提供两种校验接口,分别为:ledger_hist_check(text,...和
ledger_gchain_check(text...。普通用户调用校验接口,仅能校验自己有权限访问的表。

校验防篡改用户表和用户历史表的接口为pg_catalog.ledger_hist_check,操作
为:
SELECT pg_catalog.ledger_hist_check(schema_name text,table_name text);
如果校验通过,函数返回t,反之则返回f。

校验防篡改用户表、用户历史表和全局区块表三者是否一致的接口为
pg_catalog.ledger_gchain_check,操作为:
SELECT pg_catalog.ledger_gchain_check(schema_name text, table_name text);
如果校验通过,函数返回t,反之则返回f。
操作步骤
步骤1 校验防篡改用户表ledgernsp.usertable 与其对应的历史表是否一致。
postgres=# SELECT pg_catalog.ledger_hist_check('ledgernsp', 'usertable');
查询结果如下:
ledger_hist_check
-------------------
t
(1 row)
该结果表明:防篡改用户表和用户历史表中记录的结果能够一一对应,保持一致。
步骤2 查询防篡改用户表ledgernsp.usertable 与其对应的历史表以及全局区块表中关于该表
的记录是否一致。
postgres=# SELECT pg_catalog.ledger_gchain_check('ledgernsp', 'usertable');
查询结果如下:

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
212
ledger_gchain_check
---------------------
t
(1 row)
查询结果显示,上述三表中关于ledgernsp.usertable 的记录保持一致,未发生篡改行为。
----结束

右键单击索引,选择新建索引,如下图所示:

GBase 8a 管理工具手册


- 40 -

南大通用数据技术股份有限公司

图 4-22
弹出新建索引的脚本编辑器,如下图所示:

图 4-23
指定创建索引的名称和表名,还有索引的列名,条件,点击工具栏的执行
按钮,就可以创建索引了。

decadd() 函数将两个 decimal 类型值相加。

语法
mint decadd(n1, n2, sum)
dec_t *n1;
dec_t *n2;
dec_t *sum;
n1
指向第一个运算对象的 decimal 结构的指针。

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 620 -
n2
指向第二个运算对象的 decimal 结构的指针。
sum
指向包含总和(n1 + n2)的 decimal 结构的指针。

用法
sum 可与 n1 或 n2 相同。

返回代码
0
操作成功。
-1200
导致溢出的操作。
-1201
导致下溢的操作。

示例

demo 目录中的文件 decadd.ec 包含下列样式程序。
/*
* decadd.ec *

The following program obtains the sum of two DECIMAL numbers.
*/
#include

EXEC SQL include decimal;
/* leading spaces will be ignored */
char string1[] = " 1000.6789";
char string2[] = "80";
char result[41];


GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 621 -
main()
{
mint x;
dec_t num1, num2, sum;

printf("DECADD Sample ESQL Program running.\n\n");

if (x = deccvasc(string1, strlen(string1), &num1))
{
printf("Error %d in converting string1 to DECIMAL\n", x);
exit(1);
}
if (x = deccvasc(string2, strlen(string2), &num2))
{
printf("Error %d in converting string2 to DECIMAL\n", x);
exit(1);
}
if (x = decadd(&num1, &num2, ∑))
{
printf("Error %d in adding DECIMALs\n", x);
exit(1);
}
if (x = dectoasc(∑, result, sizeof(result), -1))
{
printf("Error %d in converting DECIMAL result to string\n", x);
exit(1);
}
result[40] = '\0';
/* display result */
printf("\t%s + %s = %s\n", string1, string2, result);
printf("\nDECADD Sample Program over.\n\n");
exit(0);
}

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 622 -
输出
DECADD Sample ESQL Program running.

1000.6789 + 80 = 1080.6789

DECADD Sample Program over.