关键字:
插件;使用、人大金仓、KingbaseES
扩展插件概述
数据库中的插件(或者称为扩展、插件模块)是一种可以动态加载并扩展数据库功能的模块化组件,允许在不改变核心数据库系统代码的情况下,添加新的功能或修改现有功能。KingbaseES开发了大量的扩展包。如:dbms_output,dbms_ddl,dbms_metadata 等。在日常使用过程中,如果功能在KingbaseES中没有默认支持,可以在操作系统中进入数据库安装目录的/share/extension搜索扩展sql文件来确认。
也可以启动数据库后查询当前版本支持的扩展插件:
select * from sys_available_extensions;
列出了插件的名字、默认版本、安装版本及注释说明。
执行 \dx 查询当前已安装的扩展插件:
列出了已安装的插件名称、版本、架构模式、相关信息描述。
如果扩展包括C代码,通常还有一个C代码编译而成的共享库文件。控制文件和脚本默认放在数据库的安装目录下的 /share/extension 目录中,C 编译的共享库文件放在 /lib 中。
插件amcheck
- amcheck提供的函数可以让用户能验证关系逻辑结构的一致性,如果结构错误会报错。 B树的验证函数会检查逻辑结构中应该满足的多种条件。索引扫描以及其他操作的正确性依赖这些结构的正确性。
- 插件amcheck加载方式:CREATE EXTENSION amcheck;
插件amcheck的参数配置:无参数
插件amcheck提供的函数:bt_index_check(index regclass, heapallindexed boolean) returns void,用于验证指定的B树索引的逻辑结构正确性。
- 验证B树索引的逻辑结构正确性示例:当索引cost_ix_local为分区索引时进 行验证,SELECT bt_index_check('cost_ix_local', false);
报错:
当索引test_index为B树索引时进行验证,
SELECT bt_index_check('test_index', false);
示例中函数执行没有报错,指定索引的逻辑结构是正确的:
- select * from bt_index_parent_check('test_index'); 用于验证索引结构中的父子关系是否正确,将返回一个结果集,包含了检查到的父子关系错误的信息,若正常,将返回一个空的结果集。
- 插件amcheck的卸载:DROP EXTENSION amcheck;
插件amcheck的升级:ALTER EXTENSION amcheck UPDATE TO '1.1';
由于没有对应的更新路径会导致报错:
插件dbms_metadata
- DBMS_METADATA包是KingbaseES数据库中提供的从数据库字典中以XML或者DDL语句形式检索元数据的一系列函数。
- 插件dbms_metadata加载:CREATE EXTENSION dbms_metadata;
插件dbms_metadata的参数配置:无需配置参数
- 插件dbms_metadata使用:DBMS_METADATA.GET_DDL
返回值类型:以TEXT返回指定对象的DDL语句。暂不支持指定输出转换类型。
对于TABLE类型的对象,该函数的返回值包含以下内容:
SCHEMA名;TABLE名;列名,列的数据类型,默认值,约束;FOREIGN KEY;(如果存在)PARTITION类型和字段;(如果存在)返回TEXT内容全为大写。
\d+ test_table查看当前表的详细信息:
使用SELECT dbms_metadata.get_ddl('table', 'test_table');查看test_table表的DDL语句:
- 插件dbms_metadata的卸载:DROP EXTENSION dbms_metadata;
插件dbms_metadata升级:ALTER EXTENSION dbms_metadata UPDATE;
插件backup_pri
- backup_pri是KingbaseES的一个扩展插件,主要用于对备份/恢复操作使用权限限制,插件增加了一个新的管理特权,SYSBACKUP,允许物理备份sys_basebackup连接到目标数据库,执行物理备份操作。
- 插件backup_pri的加载:在使用 backup_pri 之前,需要将他添加到 kingbase.conf 文件的 shared_preload_libraries 中,并重启 KingbaseES 数据库。
- 插件backup_pri的参数配置:backup_pri.enable_backup_pri,取值范围为true或者false,缺省为false。
查看当前的参数配置状态:show backup_pri.enable_backup_pri;
修改参数配置状态:alter system set backup_pri.enable_backup_pri to on;
- 插件backup_pri使用方法:在数据库初始化之后,SYSTEM用户级SUPERUSER用户不具有备份恢复的权限;但具有该权限的授予与回收的权利,SYSTEM用户级SUPERUSER用户也可以给自身赋权。授予与回收的语法:alter user kmxiao sysbackup;和alter user kmxiao nosysbackup;
同时建用户的时候可以直接授予或回收:create user u1 sysbackup;和create user u2 nosysbackup;
不带默认nosysbackup,或者建库初始化时的用户也是默认nosysbackup的,想要赋予权限,可以用alter语句实现。
删除用户:drop user u1; 会自动删除这个用户的备份恢复权限,和其他系统权限一样,记录将不存在。
- 备份恢复权限流程:存储sysbackup权限的系统表 sys_privilege。物理备份sys_basebackup时,检查是否持有这个权限,若没有,报错退出。
查询系统表 sys_privilege:select * from sys_privilege;
具体流程:(1)备份恢复权限与其他普通权限一样,都是限制一些用户进行指定的操作;
(2)备份恢复权限是用户级别的,在执行备份恢复时,步骤如下:
检查当前用户是否对要备份还原的数据库有备份恢复的权限;
检查备份恢复权限,才可以进行备份恢复的操作;
无备份恢复权限,SYSTEM或SUPERUSER用户为其授予备份恢复权限。才可以执行备份恢复的操作。在执行备份恢复时,增加一项备份恢复的权限检查;
- 插件backup_pri的卸载:修改 kingbase.conf 文件中 shared_preload_libraries 参数后重启数据库,如:shared_preload_libraries = ''
插件backup_pri的升级:backup_pri扩展插件通常随着KingbaseES安装包一并升级。通常情况下用户无须单独升级这些插件。
插件fuzzystrmatch
- fuzzystrmatch提供了两个字符串之间的编辑距离的相关函数,即由一个转换成另一个所需的最少编辑操作次数。
- 插件fuzzystrmatch加载:create extension fuzzystrmatch;
- 插件fuzzystrmatch参数配置:无需配置参数。
- 插件fuzzystrmatch使用方法:
levenshtein:计算两个字符串之间编辑距离。
语法为:levenshtein(t1 text, t2 text ) RETURNS int;参数t1为源字符串,t2为目标字符串。
例如:select levenshtein('text','tst');
select levenshtein('text','text');
levenshtein_with_costs:计算两个字符串之间的编辑距离。
语法:levenshtein_with_costs(t1 text, t2 text, i1 int, i2 int, i3 int) RETURNS int;
参数t1为源字符串,t2为目标字符串,i1为insert的代价权重,i2为replace的代价权重,i3为delete的代价权重。
如:select levenshtein('tet','text', 1 ,2 ,3);
select levenshtein('tet','text', 2 ,2 ,3);
levenshtein_less_equal:求字符之间编码距离与大于指定的值的最小整数值之间的最小值。
语法:levenshtein_less_equal(t1 text, t2 text, i int) RETURNS int;
参数t1为源字符串,t2为目标字符串,i为参与比较的值。
如:SELECT levenshtein_less_equal('extensive', 'exhaustive', 2);
metaphone:计算字符串的metaphone键。
语法:metaphone(text, int) returns text。参数text表示参与计算的字符串,int表示参与运算的参考键值。
如:SELECT metaphone('GUMBO', 4);
- 插件fuzzystrmatch的卸载:drop extension fuzzystrmatch;
插件fuzzystrmatch的升级:fuzzystrmatch扩展插件通常随KingbaseES安装包一并升级。通常情况下用户无法单独升级插件。