89. sys_recovery
89.1. 插件sys_recovery简介
插件 sys_recovery 是数据找回工具,通过读取死元组来恢复不可见的表数据,可以找回 update / delete / rollback / drop column 操作后的数据,并以表的形式返回,可以方便的各种查询,帮助寻找需要的数据。
插件名为 sys_recovery
插件版本为 V1.0
89.2. 插件sys_recovery加载方式
CREATE EXTENSION sys_recovery;复制
89.3. 插件sys_recovery的参数说明配置
函数接口sys_recovery()按输出格式返回结果集(数组或表格)。
select * from sys_recovery(regclass, recoveryrow bool DEFAULT true) as (col1 type1, col2 type2, … , colN typeN);复制
传入参数
regclass(关系名)
recoveryrow(类型为bool,t表示仅被恢复的元组,f表示所有元组;不传入此项参数时,默认值为true)
输出按照as后面指定的列进行输出。输出列包含:
表中的列(type是对应列的类型)
特殊列
sys_recovery也支持指定输出表对象的系统隐含列,供恢复数据的筛选查询,如:
xmax、xmin(类型为xid)
ctid(类型为tid)
cmin、cmax(类型为cid)
tableoid(类型为oid)
如果列名或类型名错误、不匹配都会报错。
89.4. 插件sys_recovery的使用方法
加载 sys_recovery 插件后,可使用如下函数对指定表查询待恢复的数据。
注意
恢复数据前,请先设置vacuum_defer_cleanup_age,防止死元组被清除。
仅查询待恢复的数据
例如对表test进行查询。假设test有两列数据,分别是int列a和char列b。
select * from sys_recovery('test') as (a int, b char);复制
查询待恢复数据时附带系统列
例如对表test进行查询。假设test有两列数据,分别是int列a和char列b。需要查询的系统列包括xmin、xmax和ctid。
select * from sys_recovery('test') as (ctid tid, xmin xid, xmax xid, a int, b char);复制
2. 查询包括可见数据和待恢复数据在内的所有数据
例如对表test进行查询。假设test有两列数据,分别是int列a和char列b。
select * from sys_recovery('test', false) as (a int, b char);复制
3. 查询已删除列的数据
例如对表test进行查询。假设test有两列数据,分别是int列a和char列b,列b已被删除。
此时需要先行获取已删除列的attnum值。
select attnum from pg_attribute, pg_class where attrelid = pg_class.oid and pg_class.relname='test' and attname~'dropped';复制
再通过返回的attnum值进行查询。假设此处attnum返回值为2。
select * from sys_recovery('test') as (a int, dropped_attnum_2 char);复制
89.5. 插件sys_recovery卸载方法
通过 drop extension 来卸载插件。
drop extension sys_recovery;复制
89.6. 插件sys_stat_statements升级方法
通过 alter extension 来升级插件。
示例,由 1.0 升级到 1.1
ALTER EXTENSION sys_recovery UPDATE TO '1.1';复制
89.7. 其它说明
sys_recovery 通过读取死元组来恢复不可见的表数据。如果死元组已经被清除掉,那么 sys_recovery 便不能恢复出数据。
vacuum_defer_cleanup_age
设置保留恢复最近多少个事务的数据。 建议在数据恢复场景首先设置一个较大的vacuum_defer_cleanup_age参数来避免待恢复的数据被清除。 vacuum_defer_cleanup_age范围内的死元组无法被清理,可能会导致表膨胀,占用更多的存储空间。
90. sys_spacequota
90.1. 插件sys_spacequota简介
sys_spacequota可以对指定表空间的大小进行限额,一旦大于该限额,对此表空间里的数据进行insert, update, copy to,
select into, create index操作将会被警告或终止(默认为警告,警告或者终止可以通过GUC参数`` spacequota.fullwarningtype = 0/1``来配置)。
插件名为 sys_spacequota
插件版本 V1.0
90.2. 插件sys_spacequota加载方式
使用时需要创建扩展。
示例:
create extension sys_spacequota;复制
90.3. 插件sys_spacequota的参数配置
无需配置任何参数。
90.4. 插件sys_spacequota的使用方法
90.4.1. 开关及查询:
开关:创建扩展后,再开启参数开关,限额功能生效,开关不能执行在创建扩展之前。
alter system set spacequota.enable = on ; call sys_reload_conf();复制
查询信息:
select * from sys_space_quota;复制
90.4.2. remove_space_quota
删除表空间限额, 可调用 remove_space_quota(oid)方法。
语法
remove_space_quota(oid)复制
参数
oid 表空间的oid值。
返回值
无返回值。
示例:
call remove_space_quota(16384);复制
90.4.3. space_quota_check
核对表空间的限额,一旦大于该限额,对此表空间里的数据进行insert, update, copy to , select into, create index操作将会被警告或终止(默认为警告,警告或者终止可以通过GUC参数`` spacequota.fullwarningtype = 0/1``来配置)。
语法
space_quota_check()复制
参数
无参数。
返回值
无返回值。
90.4.4. set_space_quota(oid, quota)
设置或更改表空间限额, 可调用 set_space_quota(oid, quota)方法,quota的单位为字节。
语法
set_space_quota(oid, quota)。复制
参数
oid:表空间的oid值。
quota:设置的表空间限额值。
返回值
无返回值。
示例:
select spcname,oid from sys_tablespace; spcname | oid -------------+------- sys_default | 1663 sys_global | 1664 space1 | 16384 (3 rows) select set_space_quota(16384,11188800); set_space_quota ----------------- (1 row)复制
90.5. 插件sys_spacequota卸载方法¶
不需要使用时删除插件即可。
示例:
drop extension sys_spacequota;复制
90.6. 插件sys_spacequota升级方法
sys_spacequota扩展插件通常随着KingbaseES安装包一并升级。通常情况下用户无须单独升级些插件。
91. sys_squeeze
91.1. 插件sys_squeeze简介
sys_squeeze是KingbaseES的一个扩展插件,该组件将提供人工调用命令实现对表dead tuple的清理工作。该组件在清理表空间的过程中,不会全程加排他锁,能保证运行期间尽可能不影响对目标表的访问。该插件的实现依赖于逻辑解码,因此使用该插件之前必须保证数据库wal_level等级设置为'logical'。
该插件提供了清理表空间的函数,创建插件并设置好wal_level后,通过调用select squeeze.squeeze_table(opt1,opt2,opt3,opt4,opt5) 进行清理操作。 各参数的说明请见参数配置一节。
插件名为 sys_squeeze
插件版本 V1.4
其他说明:
sys_squeeze不支持对包含复合类型的表进行清理
sys_squeeze运行期间,如果数据库kingbase主进程被杀掉,sys_squeeze进程会卡住,导致其所在kingbase子进程残留,需要人工kill残留进程
91.2. 插件sys_squeeze加载方式
首先确认 sys_squeeze 是否已存在于 kingbase.conf 的 shared_preload_libraries 配置项中,正常情况下sys_squeeze默认会加载到shared_preload_libraries,可直接执行下一步语句;如果没有配置,需要将‘sys_squeeze’追加到该配置中,并重启数据库。
执行 create extension sys_squeeze;
语句。
shared_preload_libraries = 'sys_squeeze'复制
91.3. 插件sys_squeeze的参数配置
函数接口squeeze.squeeze_table(opt1,opt2,opt3,opt4,opt5) 有5个可配置参数:
opt1: 填写所要清理的目标表的模式名,必须项
opt2: 填写所要清理的目标表名,必须项
opt3: 指定该表中已存在的index 名,若指定,会在新生成的表空间中按照此index顺序物理排列tuple,可选项,不指定填null
opt4: 指定将新生成的表置入指定的表空间。 可选项,若不指定填null,表示仍然使用原有表空间。
opt5: 将相应index置入指定的表空间。可选项,若不指定填null,表示仍然使用原有表空间。
91.4. 插件sys_squeeze的使用方法
加载 sys_squeeze 插件后,可使用如下函数对指定表做清理。
1. 普通的清理 例如要对public模式下的test表做清理
select squeeze.squeeze_table('public','test',null,null,null);复制
2. 指定按照索引顺序对表内元祖进行物理排序 例如要对public模式下的test表,按照已有的索引idx对表内元祖重排
select squeeze.squeeze_table('public','test','idx',null,null);复制
3. 指定将重排后的表置入指定的表空间 例如要对public模式下的test表,放入表空间tbl_spc1
select squeeze.squeeze_table('public','test',null,'tbl_spc1',null);复制
4. 指定将重排后的表及索引置入指定的表空间 例如要对public模式下的test表以及索引idx,放入表空间tbl_spc1
select squeeze.squeeze_table('public','test',null,'tbl_spc1',ARRAY[['idx','tbl_spc1']]);复制
91.5. 插件sys_squeeze卸载方法
执行 drop extension sys_squeeze;
语句。 删除 kingbase.conf 文件中 shared_preload_libraries
内的 sys_squeeze 参数,重启数据库。
91.6. 插件sys_squeeze升级方法
sys_squeeze扩展插件通常随着KingbaseES安装包一并升级。通常情况下用户无须单独升级该插件。
92. sys_stat_statements
92.1. 插件sys_stat_statements简介
插件 sys_stat_statements 是 KingbaseES 的一个扩展插件。该插件提供了一种获取服务器执行的所有SQL语句统计信息的方法,可以用于统计数据库的资源开销,如分析TOP SQL。
插件名为 sys_stat_statements
插件版本 V1.9
92.2. 插件sys_stat_statements加载方式
修改 kingbase.conf 文件中 shared_preload_libraries
参数后重启数据库。
shared_preload_libraries = 'sys_stat_statements'复制
92.3. 插件sys_stat_statements的参数配置
该组件的主要配置参数
sys_stat_statements.max(整数)
sys_stat_statements.max是模块跟踪的最大语句数(即sys_stat_statements视图中的最大行数)。如果观察到的语句不同,则将丢弃关于执行最少的语句的信息。默认值为5000。只能在服务器启动时设置此参数。
sys_stat_statements.track(枚举)
sys_stat_statements.track控制模块计算哪些语句。指定top以跟踪顶级语句(由客户端直接发出的语句),全部也可以跟踪嵌套语句(例如在函数内调用的语句),或者不指定以禁用语句统计信息收集。默认值为top。仅超级用户可以更改此设置。
注意该参数在 V8.5 里默认值为 'top’,如果需要使用 sys_stat_statements 功能,需要将其配置为 'top'。
sys_stat_statements.track_utility(boolean)
sys_stat_statements.track_utility 控制模块是否跟踪实用程序命令。实用程序命令是除 SELECT,INSERT,UPDATE 和 DELETE之外的所有命令。默认值为 on。仅超级用户可以更改此设置。
sys_stat_statements.save(boolean)
sys_stat_statements.save指定是否在服务器关闭时保存语句统计信息。如果关闭,则统计信息不会在关闭时保存,也不会在服务器启动时重新加载。默认值为on。只能在kingbase.conf文件或服务器命令行中设置此参数。
该模块需要与 sys_stat_statements.max 成比例的附加共享内存。请注意,即使 sys_stat_statements.track 设置为 'none',只要加载模块,就会消耗此内存。
这些参数必须在kingbase.conf中设置。典型用法是:
#kingbaseconf shared_preload_libraries ='sys_stat_statements' sys_stat_statements.max = 10000 sys_stat_statements.track = 'top'复制
92.4. 插件sys_stat_statements的使用方法
KingbaseES 加载 sys_stat_statements 插件后,通过视图 sys_stat_statements 查看。
名称 | 类型 | 描述 |
---|---|---|
userid | oid | 执行该语句的用户的 OID |
dbid | oid | 在其中执行该语句的数据库的 OID |
queryid | bigint | 内部 哈希码,从语句的解析树计算得来 |
query | text | 语句的文本形式 |
calls | bigint | 被执行的次数 |
total_time | double precision | 在 该语句中花费的总时间,以毫秒计 |
min_time | double precision | 在该 语句中花费的最小时间,以毫秒计 |
max_time | double precision | 在该 语句中花费的最大时间,以毫秒计 |
mean_time | double precision | 在该 语句中花费的平均时间,以毫秒计 |
stddev_time | double precision | 在该语句中花 费时间的总体标准偏差,以毫秒计 |
rows | bigint | 该语句检索或影响的行总数 |
shared_blks_hit | bigint | 该语句造成的共享块缓冲命中总数 |
shared_blks_read | bigint | 该语句读取的共享块的总数 |
shared_blks_dirtied | bigint | 该语句弄脏的共享块的总数 |
shared_blks_written | bigint | 该语句写入的共享块的总数 |
local_blks_hit | bigint | 该语句造成的本地块缓冲命中总数 |
local_blks_read | bigint | 该语句读取的本地块的总数 |
local_blks_dirtied | bigint | 该语句弄脏的本地块的总数 |
local_blks_written | bigint | 该语句写入的本地块的总数 |
temp_blks_read | bigint | 该语句读取的临时块的总数 |
temp_blks_written | bigint | 该语句写入的临时块的总数 |
blk_read_time | double precision | 该语句花在读取块 上的总时间,以毫秒计(如果tra ck_io_timing被启用,否则为零) |
blk_write_time | double precision | 该语句花在写入块 上的总时间,以毫秒计(如果tra ck_io_timing被启用,否则为零) |
出于安全原因,非超级用户不允许查看其他用户执行的 SQL 文本或 queryid。但是,如果视图已安装在数据库中,则他们可以查看统计信息。
只要有计划的查询(即SELECT,INSERT,UPDATE和DELETE)根据内部哈希计算具有相同的查询结构,它们就会组合到单个 sys_stat_statements 条目中。通常,如果两个查询在语义上等效,则两个查询在此意义上相同,只是出现在查询中的文字常量的值除外。但是,将严格根据实用程序命令(即所有其他命令)的文本查询字符串进行比较。
当为了将查询与其他查询匹配而忽略了常量的值时,该常量将替换为 '?'。在 sys_stat_statements 显示中,查询文本的其余部分是第一个查询的文本,该查询具有与 sys_stat_statements 条目关联的特定 queryid 哈希值。
在某些情况下,文本明显不同的查询可能会合并到一个 sys_stat_statements 条目中。通常,这仅会在语义上等效的查询中发生,但是散列冲突会导致不相关的查询合并到一个条目中的可能性很小。(但是,这对于属于不同用户或数据库的查询不会发生)
92.5. 插件sys_stat_statements卸载方法
通过 drop extension 来卸载插件。
drop extension sys_stat_statements;复制
92.6. 插件sys_stat_statements升级方法
通过 alter extension 来升级插件。
示例,由 1.8 升级到 1.9
ALTER EXTENSION sys_stat_statements UPDATE TO '1.9';复制
93. sys_trgm
93.1. 插件sys_trgm简介
sys_trgm模块提供用于决定基于 trigram 匹配的字母数字文本相似度的函数和操作符,以及支持快速搜索相似字符串的索引操作符类。
插件名为 sys_trgm
插件版本 V1.4
93.2. 插件sys_trgm加载方式
create extension sys_trgm;复制
93.3. 插件sys_trgm的参数配置
无需配置任何参数
93.4. 插件sys_trgm的使用方法
93.4.1. 函数
表 93.4.1 显示sys_trgm模块所提供的函数。
函数 | 返回值 | 描述 |
---|---|---|
similarity(text, text) | real | 返回一个数字指示两个参数有多相似。 该结果的范围是 0(指示两个字符串完全不相似) 到 1(指示两个字符串完全一样)。 |
show_trgm(text) | text[] | 返回一个给定字符串中所有的 trigram 组成的一个数组(实际上除了调试很少有用)。 |
word_similarity(text, text) | real | 返回一个数字表示第一个字符串 中的trigram集合与 第二个字符串中trigram 的有序集中任何连续部分的最大相似度。 详情请见下文的解释。 |
strict_word_similarity(text, text) | real | 与word_similarity(text, text)相同, 但是强制连续部分的边界与词边界相匹配。 由于我们没有跨词的trigram, 这个函数实际上返回第一个字符串 和第二个字符串任意连续部分的相似度。 |
show_limit() | real | 返回%操作符使用的当前相似度阈值。 例如,这设定两个词被认为足够相似时, 它们之间应满足的最小相似度(已废弃)。 |
set_limit(real) | real | 设定%操作符使用的当前相似度阈值。 该阈值必须介于 0 和 1 之间(默认为 0.3)。 返回传递进来的同一个值(已废弃)。 |
考虑下面的例子:
SELECT word_similarity('word', 'two words'); word_similarity ----------------- 0.8 (1 row)复制
在第一个字符串中,trigram集合是{" w"," wo","wor","ord","rd "}。在第二个字符串中,trigram的有序集是{" t"," tw","two","wo "," w"," wo","wor","ord","rds","ds "}。在第二个字符串中最相似的trigram有序集的部分是{" w"," wo","wor","ord"},并且相似度是0.8。
这个函数返回的值可以大概地理解为第一个字符串和第二个字符串任意子串的最大相似度。不过,这个函数不会对该部分的边界加入填充。因此,除了失配的词边界之外,第二个字符串中存在的额外字符的数目没有被考虑。
同时,strict_word_similarity(text, text)在第二个字符串中选择一个由词构成的部分。在上面的例子中,strict_word_similarity(text, text)会选择单个词'words'形成的部分,其trigram集合为{" w"," wo","wor","ord","rds","ds "}。
SELECT strict_word_similarity('word', 'two words'), similarity('word', 'words'); strict_word_similarity | similarity ------------------------+------------ 0.5714286 | 0.5714286 (1 row)复制
因此,strict_word_similarity(text, text)函数对于计算整个词的相似度有用,而word_similarity(text, text)更适合于计算词的部分相似度。
注意
在从一个字符串中提取 trigram 时,sys_trgm会忽略非词字符(非字母数字)。在决定字符串中所含的 trigram 集合时,每一个词被认为具有两个空格前缀和一个空格后缀。例如,字符串“cat”中的 trigram 集合是: “ c”、 “ ca”、 “cat”以及 “at ”。 字符串“foo|bar”中的 trigram 集合是: “ f”、 “ fo”、 “foo”、 “oo ”、 “ b”、 “ ba”、 “bar”以及 “ar ”。
93.4.2. 操作符
表 93.4.2 显示 sys_trgm模块所提供的操作符。
操作符 | 返回值 | 描述 |
---|---|---|
text % text | boolean | 如果参数具有超过sys_trgm.similarity_threshold 设置的当前相似度阈值的相似度,则返回true。 |
text <% text | boolean | 如果第一个参数中的trigram集合 与第二个参数中有序trigram集合 的一个连续部分之间的相似度超过 sys_trgm.word_similarity_threshold参数 设置的当前词相似度阈值,则返回true。 |
text %> text | boolean | <%操作符的交换子。 |
text <<% text | boolean | 如果第二个参数有有序trigram集合的一个连续部分匹配词边界, 并且其与第一个参数的trigram集合的相似度超过 sys_trgm.strict_word_similarity_threshold 参数设置的当前严格词相似度阈值,则返回true。 |
text %>> text | boolean | <<%操作符的交换子。 |
text <-> text | real | 返回参数之间的“距离”,即 1 减去similarity()值。 |
text <<-> text | real | 返回参数之间的“距离”,它是 1 减去word_similarity()的值。 |
text <->> text | real | <<->操作符的交换子。 |
text <<<-> text | real | 返回参数之间的“距离”,也就是1减去strict_word_similarity()的值。 |
text <->>> text | real | <<<->操作符的交换子。 |
93.4.3. GUC参数
sys_trgm.similarity_threshold (real)
设置%操作符使用的当前相似度阈值。该阈值必须位于 0 和 1 之间(默认是 0.3)。
sys_trgm.word_similarity_threshold (real)
设置<%和%>操作符使用的当前词相似度阈值。该阈值必须位于 0 和 1 之间(默认是 0.6)。
sys_trgm.strict_word_similarity_threshold (real)
设置<<%和%>>运算符使用的当前严格单词相似性阈值。 阈值必须介于0和1之间(默认值为0.5)。
93.4.4. 索引支持
sys_trgm模块提供了 GiST 和 GIN 索引操作符类,这允许你在一个文本列上创建索引用于快速相似度搜索的目的。这些索引类型支持上述的相似度操作符,并且额外支持基于 trigram 的索引搜索用于LIKE、ILIKE、~和~*查询(这些索引不支持等值或简单比较操作符,因此你可能还需要一个常规的 B-树索引)。
例子:
CREATE TABLE test_trgm (t text); INSERT INTO test_trgm VALUES ('words'), ('word'), ('two words'),('ord'); CREATE INDEX trgm_idx ON test_trgm USING GIST (t gist_trgm_ops);复制
或
CREATE INDEX trgm_idx ON test_trgm USING GIN (t gin_trgm_ops);复制
此时,你将有一个t列上的索引,你可以用它进行相似度搜索。一个典型的查询是
SELECT t, similarity(t, 'word') AS sml FROM test_trgm WHERE t % 'word' ORDER BY sml DESC, t; t | sml -----------+------------ word | 1 words | 0.5714286 two words | 0.36363637 (3 rows)复制
这将返回在文本列中与word足够相似的所有值,按最佳匹配到最差匹配的方式排序。索引将被用来让这种搜索变快,即使在一个非常大的数据集上。
上述查询的一种变体是
SELECT t, t <-> 'word' AS dist FROM test_trgm ORDER BY dist LIMIT 10; t | dist -----------+------------ word | 0 words | 0.4285714 two words | 0.6363636 ord | 0.71428573 (4 rows)复制
这能够用 GiST 索引有效地实现,但是用 GIN 索引无法做到。当只想要少数最接近的匹配时,这通常会比第一种形式更好。
也可以把一个t列上的索引用于词相似度或者严格词相似度。典型的查询是:
SELECT t, word_similarity('word', t) AS sml FROM test_trgm WHERE 'word' <% t ORDER BY sml DESC, t; t | sml -----------+----- word | 1 two words | 0.8 words | 0.8 (3 rows)复制
和
SELECT t, strict_word_similarity('word', t) AS sml FROM test_trgm WHERE 'word' <<% t ORDER BY sml DESC, t; t | sml -----------+----------- word | 1 two words | 0.5714286 words | 0.5714286 (3 rows)复制
这将返回文本列中符合条件的所有值:这些值在其对应的有序trigram集中有一个连续部分与word的trigram集合足够相似,这些值会按照最好匹配到最差匹配的顺序排列。即便在非常大的数据集上,索引也将使得这一操作的速度够快。
上述查询可能的变体有:
SELECT t, 'word' <<-> t AS dist FROM test_trgm ORDER BY dist LIMIT 10; t | dist -----------+------------ word | 0 words | 0.19999999 two words | 0.19999999 ord | 0.6 (4 rows)复制
和
SELECT t, 'word' <<<-> t AS dist FROM test_trgm ORDER BY dist LIMIT 10; t | dist -----------+------------ word | 0 words | 0.4285714 two words | 0.4285714 ord | 0.71428573 (4 rows)复制
这可以用 GiST 索引很高效地实现,但是用 GIN 索引不行。
这些索引类型也支持用于LIKE和ILIKE的索引搜索,例如
该索引搜索通过从搜索字符串中抽取 trigram 并且在索引中查找它们来工作。搜索字符串中有更多 trigram,索引搜索的效率更高。不像基于 B-树的搜索,搜索字符串不需要是左锚定的。
这些索引类型也支持用于正则表达式匹配(~和~*操作符)的索引搜索,例如
SELECT * FROM test_trgm WHERE t ~ '(wo|rd)'; t ----------- words word two words ord (4 rows)复制
该索引搜索通过从正则表达式中抽取 trigram 并且在索引中查找它们来工作。正则表达式中能抽取出更多 trigram,索引搜索的效率更高。不像基于 B-树的搜索,搜索字符串不需要是左锚定的。
对于LIKE和正则表达式搜索,记住没有可抽取 trigram 的模式将退化成一个全索引扫描。
GiST 和 GIN 索引之间的选择依赖于 GiST 和 GIN 的相对性能特性,这在其他地方讨论。
93.4.5. 文本搜索集成
在与一个全文索引联合使用时,trigram 匹配是一种非常有用的工具。特别是它能有助于识别拼写错误的输入词,这些词直接用全文搜索机制是不会被匹配的。
第一步是生成一个包含文档中所有唯一词的辅助表:
CREATE TABLE words AS SELECT word FROM ts_stat('SELECT to_tsvector(''simple'', bodytext) FROM documents');复制
其中documents是一个具有我们希望搜索的文本域bodytext的表。对to_tsvector函数使用simple配置而不是使用语言相关的配置的原因是,我们想要一个原始(没有去掉词根的)词的列表。
接下来,在词列上创建一个 trigram 索引:
CREATE INDEX words_idx ON words USING GIN(word gin_trgm_ops);复制
现在,类似于前面例子的一个SELECT查询可以被用来为用户搜索术语中的拼写不当的词建议拼写。要求被选择的词也与拼写不当的词具有相似的长度是一种有用的额外测试。
注意
由于words表已经被生成为一个单独的、静态的表,它将需要被定期地重新生成,这样它能合理地与文档集合保持一致。但是要求它完全与文档集合同步通常是不必要的。
93.5. 插件sys_trgm卸载方法
drop extension sys_trgm;复制
93.6. 插件sys_trgm升级方法¶
sys_trgm扩展插件通常随着KingbaseES安装包一并升级。通常情况下用户无须单独升级些插件。
94. sys_visibility
94.1. 插件sys_visibility简介
sys_visibility提供了查看表的VM页数据和页级别可见性的函数。 它还提供了用来检查VM页和表数据的一致性、以及强制删除VM重建的函数。 默认情况下,sys_truncate_visibility_map(relation regclass)只能由超级用户执行。 其他函数可以由超级用户和sys_stat_scan_tables角色的成员执行。
插件名为 sys_visibility
插件版本 V1.2
94.2. 插件sys_visibility加载方式
CREATE EXTENSION sys_visibility;复制
94.3. 插件sys_visibility的参数配置
无需配置任何参数。
94.4. 插件sys_visibility的使用方法
sys_visibility提供了以下函数:
sys_visibility_map(relation regclass, blkno bigint, all_visible OUT boolean, all_frozen OUT boolean) returns record
返回给定关系(relation)的给定块(blkno)在VM页面中的“全部可见”(all_visible)和 “全部冻结”(all_frozen)位。
sys_visibility(relation regclass, blkno bigint, all_visible OUT boolean, all_frozen OUT boolean, pd_all_visible OUT boolean) returns record
返回给定关系(relation)的给定块(blkno)在VM页面中的“全部可见”(all_visible)和 “全部冻结”(all_frozen)位,外加块上的“全部可见”位(pd_all_visible)。
sys_visibility_map(relation regclass, blkno OUT bigint, all_visible OUT boolean, all_frozen OUT boolean) returns setof record
返回给定关系(relation)的每一个块(blkno)在VM页面中的“全部可见”(all_visible)和 “全部冻结”(all_frozen)位。
sys_visibility(relation regclass, blkno OUT bigint, all_visible OUT boolean, all_frozen OUT boolean, pd_all_visible OUT boolean) returns setof record
返回给定关系(relation)的每一个块(blkno)在VM页面中的“全部可见”(all_visible)和 “全部冻结”(all_frozen)位,外加块上的“全部可见”位(pd_all_visible)。
sys_visibility_map_summary(relation regclass, all_visible OUT bigint, all_frozen OUT bigint) returns record
返回给定关系(relation)的VM页面中记录的“全部可见”页面(all_visible)和“全部冻结”页面(all_frozen)的数量。
sys_check_frozen(relation regclass, t_ctid OUT tid) returns setof tid
返回给定关系(relation)中没有冻结但在VM页面中标记“全部冻结”的元组的TID(t_ctid)。 函数返回非空的结果说明VM页面已经损坏。
sys_check_visible(relation regclass, t_ctid OUT tid) returns setof tid
返回给定关系(relation)中没有全部可见但在VM页面中标记“全部可见”的元组的TID(t_ctid)。 函数返回非空的结果说明VM页面已经损坏。
sys_truncate_visibility_map(relation regclass) returns void
清空给定关系(relation)的VM页面。如果该关系的VM页面可能已经损坏,函数可以用来望强制重建VM页面。 清空后在该关系上的第一次VACUUM会重建VM页面,在此之前VM页面被认为存储了全0数据。
94.5. 插件sys_visibility卸载方法
DROP EXTENSION sys_visibility;复制
94.6. 插件sys_visibility升级方法
通过 ALTER EXTENSION升级插件。
示例,升级到 1.1:
ALTER EXTENSION sys_visibility UPDATE TO '1.1';复制
95. sysaudit
95.1. 插件sysaudit简介
sysaudit是KingbaseES的一个扩展插件,主要用于支持数据库审计功能,对数据库系统中发生的动作(或事件),将其对应的操作对象、操作时间等信息记录下来。
KingbaseES数据库提供了一套完整的审计机制,用来保证对数据库中的各种行为进行监控,进而为数据库的安全、可靠和有效提供有力的保障。
插件名为 sysaudit
插件版本 V1.0
95.2. 插件sysaudit加载方式
在使用 sysaudit 之前,我们需要将他添加到 kingbase.conf 文件的 shared_preload_libraries 中,并重启 KingbaseES 数据库。
示例:
shared_preload_libraries = 'sysaudit'复制
95.3. 插件sysaudit的参数配置
具体参考《 KingbaseES安全指南 》 第 7 章数据库审计。
95.4. 插件sysaudit使用方法
具体参考《 KingbaseES安全指南 》 第 7 章数据库审计。
95.5. 插件sysaudit卸载方法
修改 kingbase.conf 文件中 shared_preload_libraries
参数后重启数据库。
示例:
shared_preload_libraries = ''复制
95.6. 插件sysaudit升级方法
具体参考《 KingbaseES安全指南 》 第 7 章数据库审计。
96. sysencrypt
96.1. 插件sysencrypt简介
sysencrypt 是一个 Kingbase 的扩展,可以实现数据加解密。这种方式更为灵活,当数据库的实用场景需要数据加解密时,加载插件即可。而不需要该功能时,卸载插件即可。
插件名为 sysencrypt
插件版本 V1.0
96.2. 插件sysencrypt加载方式
在使用 sysencrypt 之前,我们需要将他添加到 kingbase.conf 文件的 shared_preload_libraries 中,并重启 KingbaseES 数据库。
shared_preload_libraries = 'sysencrypt' # (change requires restart) -- 创建插件 \c - system create extension sysencrypt;复制
96.3. 插件sysencrypt参数配置
sysencrypt.encrypt_user_tablespace
是否默认创建表空间加密, 默认值为false即创建表空间默认不加密。
show sysencrypt.encrypt_user_tablespace; encrypt_user_tablespace ------------------------- off (1 row) \c - system alter system set sysencrypt.encrypt_user_tablespace to on; select sys_reload_conf(); show sysencrypt.encrypt_user_tablespace; encrypt_user_tablespace ------------------------- on (1 row)复制
96.4. 插件sysencrypt使用方法
具体参考《 KingbaseES安全指南 》 章节8.1.5.2 加密插件。
96.5. 插件sysencrypt卸载方法
修改 kingbase.conf 文件中 shared_preload_libraries
参数后重启数据库。
示例:
shared_preload_libraries = ''
96.6. 插件sysencrypt升级方法
sysencrypt扩展插件通常随着KingbaseES安装包一并升级。通常情况下用户无须单独升级这些插件。
97. sysmac
97.1. 插件sysmac简介
sysmac是KingbaseES的一个扩展插件,主要用于支持标记和强制访问控制,保护用户数据,防止非法窃取。
强制访问控制(MAC)与DAC相比,MAC提供更严格和灵活的控制方式。MAC首先为所控制的主体和客体指派安全标记,然后依据这些标记进行访问仲裁。并且,只有主体标记能支配客体标记时才允许主体访问。
插件名为 sysmac
插件版本 V1.0
97.2. 插件sysmac加载方式
在使用 sysmac 之前,我们需要将他添加到 kingbase.conf 文件的 shared_preload_libraries 中,并重启 KingbaseES 数据库。
示例:
shared_preload_libraries = 'sysmac'复制
97.3. 插件sysmac的参数配置
sysmac.enable_mac
启动强制访问控制功能的开关,取值范围为 true 或者 false ,缺省值为 false。
show sysmac.enable_mac; sysmac.enable_mac ------------------- off (1 row) alter system set sysmac.enable_mac = on; select sys_reload_conf(); show sysmac.enable_mac; sysmac.enable_mac ------------------- on (1 row)复制
97.4. 插件sysmac使用方法
具体参考《 KingbaseES安全指南 》 第 8 章标记和强制访问控制。
97.5. 插件sysmac卸载方法
修改 kingbase.conf 文件中 shared_preload_libraries
参数后重启数据库。
示例:
shared_preload_libraries = ''复制
97.6. 插件sysmac升级方法
插件sysmac与插件sys_anon的升级方式相同,具体参考《 KingbaseES安全指南 》 第 8 章标记和强制访问控制。