插件backtrace是KingbaseES 的一个扩展插件。主要功能是在服务端程序崩溃时捕获宕机堆栈信息,并将core堆栈信息打印输出到前端或日志文件里。可用于协助分析KingbaseES宕机的原因。通常release版本的KingbaseES需要使用debug文件协助分析宕机原因。
插件backtrace相关功能在服务程序崩溃时自动触发,无须人为干预,插件在服务端程序启动时默认加载。
插件名为 backtrace
插件版本 V1.0
KingbaseES数据库默认将他添加到 kingbase.conf 文件的 shared_preload_libraries 中,重启数据库时自动加载。
示例:
shared_preload_libraries = 'backtrace'
无需配置任何参数
KingbaseES加载 backtrace 插件后,程序崩溃时会自动捕获宕机的堆栈信息,并将core 堆栈信息打印输出到前端或日志文件里。
修改 kingbase.conf 文件中 shared_preload_libraries
参数后重启数据库。
示例:
shared_preload_libraries = ''
backtrace扩展插件通常随着KingbaseES安装包一并升级。通常情况下用户无须单独升级些插件。
backup_pri是KingbaseES的一个扩展插件,主要用于对备份/恢复操作使用权限限制,插件增加了一个新的管理特权,SYSBACKUP,允许物理备份sys_basebackup连接到目标数据库,执行物理备份操作。
插件名为 backup_pri
插件版本 V1.0
在使用 backup_pri 之前,需要将他添加到 kingbase.conf 文件的 shared_preload_libraries 中,并重启 KingbaseES 数据库。
示例:
shared_preload_libraries = 'backup_pri'
backup_pri.enable_backup_pri
启用备份恢复权限功能,取值范围为ture或者false,缺省为 false。
show backup_pri.enable_backup_pri; backup_pri.enable_backup_pri ------------------------------- off (1 row) alter system set backup_pri.enable_backup_pri to on; select pg_reload_conf(); show backup_pri.enable_backup_pri; backup_pri.enable_backup_pri ------------------------------- on (1 row)
在数据库初始化之后,SYSTEM用户级SUPERUSER用户不具有备份恢复的权限;但具有该权限的授予与回收的权利,SYSTEM用户级SUPERUSER用户也可以给自身赋权。
授予与回收的语法:
alter user u1 sysbackup; alter user u1 nosysbackup;
同时建用户的时候可以直接授予或回收
create user u1 sysbackup; create user u1 (nosysbackup);
不带默认nosysbackup,或者建库初始化时的用户也是默认nosysbackup的,想要赋予权限,可以用alter语句实现。
删除用户的时候语法:
drop user u1;
会自动删除这个用户的备份恢复权限,和其他系统权限一样,记录将不存在。
存储sysbackup权限的系统表 sys_privilege。物理备份sys_basebackup时,检查是否持有这个权限,若没有,报错退出。
具体流程如下:
备份恢复权限与其他普通权限一样,都是限制一些用户进行指定的操作;
备份恢复权限是用户级别的,在执行备份恢复时,步骤如下:
检查当前用户是否对要备份还原的数据库有备份恢复的权限;
检查备份恢复权限,才可以进行备份恢复的操作;
无备份恢复权限,SYSTEM或SUPERUSER用户为其授予备份恢复权限。才可以执行备份恢复的操作。在执行备份恢复时,增加一项备份恢复的权限检查;
sysbackup权限相关的三个系统视图如下:
backup_pri.dba_sys_privs
查询出所有的用户的sysbackup权限和其他系统权限,若用户没有sysbackup权限,有可能显示的是空,或者nosysbackup两种情况。
backup_pri.dba_sys_privs 视图的每个字段意义如下表所示:
列名 | 描述 |
---|---|
username | 用户名 |
userid | 用户 id |
superuser | 超级用户 |
inherit | 继承 |
createrole | 创建角色 |
createdb | 创建库 |
canlogin | 登录 |
replication | 流复制 |
bypassrls | 安全测试 RLS |
sysbackup | 备份恢复 |
backup_pri.user_sys_privs
查询出当前的用户的sysbackup权限和其他系统权限,若当前用户没有sysbackup权限,有可能显示的是空,或者 nosysbackup两种情况。
backup_pri.user_sys_privs 视图的每个字段意义如下表所示:
列名 | 描述 |
---|---|
username | 用户名 |
userid | 用户id |
superuser | 超级用户 |
inherit | 继承 |
createrole | 创建角色 |
createdb | 创建库 |
canlogin | 登录 |
replication | 流复制 |
bypassrls | 安全测试 RLS |
sysbackup | 备份恢复 |
backup_pri.role_sys_privs
查询出角色的 sysbackup 权限和其他系统权限,若角色没有 sysbackup 权限,有可能显示的是空,或者 nosysbackup两种情况。
backup_pri.role_sys_privs 视图的每个字段意义如下表所示:
列名 | 描述 |
---|---|
rolename | 角色名 |
roleid | 角色id |
superuser | 超级用户 |
inherit | 继承 |
createrole | 创建角色 |
createdb | 创建库 |
canlogin | 登录 |
replication | 流复制 |
bypassrls | 安全测试 RLS |
sysbackup | 备份恢复 |
修改 kingbase.conf 文件中 shared_preload_libraries
参数后重启数据库。
示例
shared_preload_libraries = ''
backup_pri扩展插件通常随着KingbaseES安装包一并升级。通常情况下用户无须单独升级这些插件。
插件bloom是KingbaseES的一个扩展插件。 bloom提供了一种基于bloom过滤器的索引访问方法。
bloom过滤器是一种节省空间的数据结构,用于测试元素是否是集合的成员。对于索引访问方法,它允许通过签名快速排除不匹配的元组。签名的大小在索引创建是确定。
签名是索引属性的一种有损表示,并且因此容易报告误报。也就是说,当元素不在集合中时,可能会报告该元素在集合中。因此,必须始终使用堆条目中实际属性值重新检查索引的搜索结果。更大的签名可以降低误报的机率。从而减少无用的堆访问次数,但也会让索引更大,从而降低扫描速度。
当一个表有许多属性并且查询测试他们的任意组合时,这种类型的索引最有效,传统的btree索引比bloom索引快,但它可能需要许多btree索引来支持所有可能的查询。而bloom索引只需要一个。请注意,bloom索引只支持等值查询,而btree索引也可以支持非等和范围查询。
插件名为 bloom
插件版本 V1.0
KingbaseES默认不加载bloom插件,需要用户使用示例中的命令,人为手工加载。
示例:
create extension bloom;
bloom索引在其WITH子句中接受下列参数
length
每个签名(索引项)的长度位数,它会被圆整成为最近的16的倍数。默认是80位,最长是4096位。
col1 — col32
从每一个索引列产生的位数。每个参数的名字表示它所控制的索引列的编号。默认是2位,最大是4095位。没有实际使用的索引列的参数会被忽略。
示例:
这是一个创建布鲁姆索引的例子。
CREATE INDEX bloomidx ON tbloom USING bloom (i1,i2,i3) WITH (length=80, col1=2, col2=2, col3=4);
该索引是用长度为 80 位的签名所创建,其中属性 i1 和 i2 被映射为 2 位,属性 i3 被映射为 4 位。我们可以省略length、col1和col2说明,因为它们都有默认值。 这里是布鲁姆索引定义和使用的更完整的例子,其中还与等效的 btree 做了对比。布鲁姆索引比 btree 索引更小,并且效率更高。
bloom插件的卸载也需要用户使用示例中的命令,人为手工卸载。
示例:
drop extension bloom;
bloom扩展插件通常随着KingbaseES安装包一并升级。通常情况下用户无须单独升级该插件。
btree_gin为以下数据类型提供了B树等价行为的GIN操作符类:
macaddr8 int2 int4 int8 float4 float8 money oid timestamp timestamptz time timetz date interval macaddr inet cidr text varchar char bytea bit varbit numeric enum uuid name bool bpchar
一般情况下,这些操作符类不会比B树的表现更好,而且缺少B树最重要的特性之一支持唯一索引。但这些操作符可以用于GIN测试或是作为其他GIN操作符类开发的参考。在特定情况下,例如查询同时涉及一列适合GIN索引的列和一列适合B树索引的列,这时创建GIN的两列联合索引可能比创建GIN索引和B树索引再通过位图与扫描方式查询效率更高。
插件可以被任何在当前库具有CREATE权限的用户创建。
插件名为 btree_gin
插件版本 V1.3
KingbaseES默认不加载btree_gin插件,需要用户使用示例中的命令,人为手工加载。
示例:
CREATE EXTENSION btree_gin;
无需配置任何参数
CREATE TABLE test (a int4); -- create index CREATE INDEX testidx ON test USING GIN (a); -- query SELECT * FROM test WHERE a < 10;
btree_gin插件的卸载也需要用户使用示例中的命令,人为手工卸载。
示例:
DROP EXTENSION btree_gin;
通过 ALTER EXTENSION升级插件。
示例,升级到 1.1:
ALTER EXTENSION btree_gin UPDATE TO '1.1';
btree_gist为以下数据类型提供了B树等价行为的GIST操作符类
uuid oid int2 int4 int8 float4 float8 timestamp timestamptz time timetz date interval cash macaddr text bpchar bytea numeric bit vbit inet cidr macaddr8 enum
一般情况下,这些操作符类不会比B树的表现更好,而且缺少B树最重要的特性之一支持唯一索引。但这些操作符可以用于GiST测试或是作为其他GiST操作符类开发的参考。在特定情况下,例如查询同时涉及一列适合GiST索引的列和一列适合B树索引的列,这时创建GiST的两列联合索引可能比创建GiST索引和B树索引再通过位图与扫描方式查询效率更高。
插件还提供了B树索引不支持的“<>”(不等于)操作符,这在创建EXCLUDE约束时很有用。插件对于可以作为距离度量的数据类型提供了距离操作符<->,为使用这个操作符的最近邻搜索提供了GiST索引支持。插件可以被任何在当前库具有CREATE权限的用户创建。
插件名为 btree_gist
插件版本 V1.5
KingbaseES默认不加载btree_gist插件,需要用户使用示例中的命令,人为手工加载。
示例:
CREATE EXTENSION btree_gist;
无需配置任何参数
示例如下:
CREATE TABLE test (a int4); CREATE INDEX testidx ON test USING GIST (a); SELECT * FROM test WHERE a < 10; -- 最近邻搜索,找距离42最近的10行数据 SELECT *, a <-> 42 AS dist FROM test ORDER BY a <-> 42 LIMIT 10; -- 使用EXCLUDE约束来创建规则一个动物园里的一个笼子只能装一种动物 CREATE TABLE zoo ( cage INTEGER, animal TEXT, EXCLUDE USING GIST (cage WITH =, animal WITH <>) ); INSERT INTO zoo VALUES(123, 'zebra'); INSERT INTO zoo VALUES(123, 'zebra'); INSERT INTO zoo VALUES(123, 'lion'); -- 预期违反约束报错 ERROR: conflicting key value violates exclusion constraint "zoo_cage_animal_excl" DETAIL: Key (cage, animal)=(123, lion) conflicts with existing key (cage, animal)=(123, zebra). => INSERT INTO zoo VALUES(124, 'lion');
btree_gist插件的卸载也需要用户使用示例中的命令,人为手工卸载。
示例:
DROP EXTENSION btree_gist;
通过 ALTER EXTENSION升级插件。
示例,升级到 1.1
ALTER EXTENSION btree_gist UPDATE TO '1.1';