金仓数据库 KingbaseES插件参考手册 F

27. file_fdw

27.1. 插件file_fdw简介

file_fdw模块提供外部数据包装器file_fdw, 它能被用来访问服务器的文件系统中的数据文件,或者在服务器上执行程序并读取它们的输出。 数据文件或程序输出必须是能够被COPY FROM读取的格式, 详见COPY。当前只能读取数据文件。

27.2. 插件file_fdw加载方式

在ksql中运行:

create extension file_fdw;

27.3. 插件file_fdw的参数配置

用这个包装器创建的一个外部表可以有下列选项:

  • filename

    指定要被读取的文件。必须是一个绝对路径名。 必须指定filename或program, 但不能同时指定两个。

  • program

    指定要执行的命令。该命令的标准输出将被读取, 就像使用COPY FROM PROGRAM一样。必须指定program 或filename,但不能同时指定两个。

  • format

    指定数据的格式,和COPY的FORMAT选项相同。

  • header

    指定数据是否具有一个头部行,和COPY的HEADER选项相同。

  • delimiter

    指定数据的定界符字符,和COPY的DELIMITER选项相同。

  • quote

    指定数据的引用字符,和COPY的QUOTE选项相同。

  • escape

    指定数据的转义字符,和COPY的ESCAPE选项相同。

  • null

    指定数据的空字符串,和COPY的NULL选项相同。

  • encoding

    指定数据的编码,和COPY的ENCODING选项相同。

注意虽然COPY允许诸如HEADER的选项不用一个相应的值指定, 但是外部表选项语法要求在所有情况下都出现一个值。要激活通常写入没有值的 COPY选项,你可以传递值 TRUE,因为所有这些选项都是布尔值。

使用这个包装器创建的表的一列可以具有下列选项:

  • force_not_null

    这是一个布尔选项。如果为真,它指定该列的值不应该与空字符串匹配(也就是表级别的null选项)。这和把该列放在COPY的FORCE_NOT_NULL选项中具有相同的效果。

  • force_null

    这是一个布尔选项。如果为真,它指定匹配空值字符串的列值会被返回为NULL, 即使该值被引号引用。如果没有这个选项,只有匹配空值字符串的未被引用的值会被返回为 NULL。这和在COPY的FORCE_NULL 选项中列出该列有同样的效果。

COPY的FORCE_QUOTE选项当前不被file_fdw支持。

这些选项只能为一个外部表及其列指定,而不能在file_fdw外部数据包装器的选项中指定,也不能在使用该包装器的服务器或者用户映射的选项中指定。

出于安全原因,改变表级别的选项要求超级用户特权或 具有默认角色pg_read_server_files(使用文件名)或 默认角色pg_execute_server_program (使用程序)的权限 只有特定用户能够控制读取哪个文件或者运行哪个程序。 原则上普通用户可以被允许改变其它选项,但是当前还不支持这样做。

当指定program选项时,请记住,选项字符串是通过shell执行的。 如果想传递任何参数到来自不受信任的源的命令, 必须小心去掉或转义任何对shell来说可能有特殊含义的字符。安全起见,最好使用固定的命令字符串, 或者至少避免传递任何用户输入。

对于一个使用file_fdw的外部表,EXPLAIN显示要读取的文件名或要运行的程序。对于文件来说,除非指定COSTS OFF,否则文件尺寸(以字节计)也会被显示。

27.4. 插件file_fdw的使用方法

一种file_fdw的用法是把可用的 PostgreSQL 活动日志变成一个表用于查询。要这样做,首先你必须正在将日志记录到一个 CSV 文件,这里我们称其为pglog.csv。首先,将file_fdw安装为一个扩展:

CREATE EXTENSION file_fdw;

然后创建一个外部服务器

CREATE SERVER pglog FOREIGN DATA WRAPPER file_fdw;

现在你已经准备好创建外部数据表。使用CREATE FOREIGN TABLE命令,你将需要为该表定义列、CSV 文件名以及格式。

CREATE FOREIGN TABLE pglog (
  log_time timestamp(3) with time zone,
  user_name text,
  database_name text,
  process_id integer,
  connection_from text,
  session_id text,
  session_line_num bigint,
  command_tag text,
  session_start_time timestamp with time zone,
  virtual_transaction_id text,
  transaction_id bigint,
  error_severity text,
  sql_state_code text,
  message text,
  detail text,
  hint text,
  internal_query text,
  internal_query_pos integer,
  context text,
  query text,
  query_pos integer,
  location text,
  application_name text
) SERVER pglog
OPTIONS ( filename '/home/josh/data/log/pglog.csv', format 'csv' );

就是这样了 — 现在你能够直接查询你的日志了。当然,在生产中你会需要定义一些方法来处理日志轮转。

27.5. 插件file_fdw卸载方式

在ksql中运行

drop extension file_fdw;

27.6. 插件file_fdw升级方式

file_fdw扩展插件通常随着KingbaseES安装包一并升级。通常情况下用户无须单独升级些插件。

28. fix_security_hole

28.1. 插件fix_security_hole简介

fix_security_hole是KingbaseES的一个扩展插件,主要用于禁止数据库通过copy执行操作系统shell命令。

  • 插件名为 fix_security_hole

  • 插件版本 V1.0

28.2. 插件fix_security_hole加载方式

在使用 fix_security_hole 之前,我们需要将他添加到 kingbase.conf 文件的 shared_preload_libraries 中,并重启 KingbaseES 数据库。

示例:

shared_preload_libraries = 'fix_security_hole'

28.3. 插件fix_security_hole的参数配置

close_copy_crogram

启动禁止copy执行操作系统shell命令,取值范围为 on 或者 off,缺省为 on。

show close_copy_crogram;
 close_copy_crogram
--------------------
 on
(1 row)

\c - system
alter system set close_copy_crogram = off;
select sys_reload_conf();
show close_copy_crogram;
 close_copy_crogram
--------------------
 off
(1 row)

28.4. 插件fix_security_hole使用方法

KingbaseES加载 fix_security_hole 插件后,超级用户将无法通过copy执行操作系统的shell命令。

示例:

--功能为关闭状态时
create table t1 (a text);
copy t1 from program 'ifconfig';
COPY 51

.. code::

--功能为开启状态时
create table t1 (a text);
copy t1 from program 'ifconfig';
错误:  not support Copy_To/From_Porgram feature

28.5. 插件fix_security_hole卸载方法

修改 kingbase.conf 文件中 shared_preload_libraries 参数后重启数据库。

示例:

shared_preload_libraries = ''

28.6. 插件fix_security_hole升级方法

fix_security_hole扩展插件通常随着KingbaseES安装包一并升级。通常情况下用户无须单独升级这些插件。

29. ftutils

29.1. 插件ftutils简介

ftutils是一个KingbaseES的扩展,主要用于从存储流版式文件的blob类型字段中抽取文本内容。其中blob类型字段内容可以包括 pdf、doc、docx、wps、xls、xlsx、ppt和pptx格式文件。blob类型只在Oracle模式下支持,因此ftutils扩展也仅支持oracle模式.

29.2. 插件ftutils加载方式

在使用ftutils之前,需要将他添加到kingbase.conf文件的shared_preload_libraries中,并重启KingbaseES数据库。

shared_preload_libraries = 'ftutils' # (change requires restart)

使用KSQL创建插件

CREATE EXTENSION ftutils;

29.3. 插件ftutils的参数配置

无需配置任何参数

29.4. 插件ftutils的使用方法

ftutils插件提供了extracttext函数用于抽取存储在blob类型字段内的文件内容。extracttext函数接受一个代表文件内容的blob类型参数,返回抽取的text类型文本内容。

CREATE TABLE tab (title text, body blob);

INSERT INTO tab VALUES ('test.doc', blob_import('/home/test/data.doc'));

SELECT title, length(extracttext(body),null) FROM tab;

29.4.1. 使用ftutils全文检索的联合使用方案

由于电子文档内容抽取速度较慢,为提高全文检索性能,可以在表中添加存储列,用于存储内容抽取结果或者词位列表。

方案一
CREATE EXTENSION zhparser;

CREATE TEXT SEARCH CONFIGURATION zhparsercfg (PARSER = zhparser);

ALTER TEXT SEARCH CONFIGURATION zhparsercfg ADD MAPPING FOR n,v,a,i,e,l WITH simple;

CREATE EXTENSION ftutils;

CREATE TABLE tab (title text, body blob);

ALTER TABLE tab ADD COLUMN content text GENERATED ALWAYS AS (extracttext(body,null)) STORED;

CREATE INDEX tab_idx ON tab USING GIN (to_tsvector('zhparsercfg', content));

INSERT INTO tab VALUES ('test.doc', blob_import('/home/test/data.doc'));

SELECT title FROM tab WHERE to_tsvector('zhparsercfg', content) @@ to_tsquery('日志');
方案二
CREATE EXTENSION zhparser;

CREATE TEXT SEARCH CONFIGURATION zhparsercfg (PARSER = zhparser);

ALTER TEXT SEARCH CONFIGURATION zhparsercfg ADD MAPPING FOR n,v,a,i,e,l WITH simple;

CREATE EXTENSION ftutils;

CREATE TABLE tab (title text, body blob);

ALTER TABLE tab ADD COLUMN tab_idx_col tsvector GENERATED ALWAYS AS (to_tsvector('zhparsercfg', extracttext(body,null))) STORED;

CREATE INDEX tab_idx ON tab USING GIN (tab_idx_col);

INSERT INTO tab VALUES ('test.doc', blob_import('/home/test/data.doc'));

SELECT title FROM tab WHERE tab_idx_col @@ to_tsquery('日志');

29.4.2. 注意事项

1)在数据库默认扩展加载机制下,在一个会话中创建扩展以后,在新的会话开始后并不是立即加载扩展动态库,而是直到首次调用扩展中的接口时才会加载扩展动态库,导致在这之前在新会话中设置扩展参数无效。解决方法是修改数据库配置文件中的shared_preload_libraries或者session_preload_libraries两个参数之一,使参数值包括ftutils,即可在新会话开始后立即加载ftutils扩展动态库,并设置扩展参数。

2) 基于前面的全文检索联合使用方案,在系统内存较少的环境中,需要限制并行插入数据的会话进程数量,以免系统内存被耗尽。

29.5. 插件ftutils卸载方法

DROP EXTENSION ftutils;

29.6. 插件ftutils升级方法

ALTER EXTENSION UPDATE ftutils TO '2.0';

30. ftutilx

30.1. 插件ftutilx简介

ftutilx是一个KingbaseES的扩展,主要用于从存储流版式文件的blob类型字段中抽取文本内容。其中blob类型字段内容可以包括 pdf、doc、docx、wps、xls、xlsx、ppt和pptx格式文件。ftutilx插件不支持加密文件格式。

30.2. 插件ftutilx加载方式

在使用ftutilx之前,需要将他添加到kingbase.conf文件的shared_preload_libraries中,并重启KingbaseES数据库。

shared_preload_libraries = 'ftutilx' # (change requires restart)

使用KSQL创建插件:

CREATE EXTENSION ftutilx;

30.3. 插件ftutilx的参数配置

ftutilx.max_string_length

抽取结果最大长度,默认值128M,该参数设置后立即生效。

ftutilx.jvm_option_string

JVM初始化参数,默认值"-Xmx1024m,-Xms1024m,-Xmn256m,-XX:MetaspaceSize=64m,-XX:MaxMetaspaceSize=128m,-XX:CompressedClassSpaceSize=256m",该参数只在会话进程中首次调用extracttext函数创建JVM时生效,再次设置该参数不再有效。

在数据库默认扩展加载机制下,在一个会话中创建扩展以后,在新的会话开始后并不是立即加载扩展动态库,而是直到首次调用扩展中的接口时才会加载扩展动态库,导致在这之前在新会话中设置扩展参数无效。 解决方法是修改数据库配置文件中的shared_preload_libraries或者session_preload_libraries两个参数之一,使参数值包括ftutilx,即可在新会话开始后立即加载ftutilx扩展动态库,并设置扩展参数。

30.4. 插件ftutilx的使用方法

ftutilx插件提供了extracttext函数用于抽取存储在blob类型字段内的文件内容。extracttext函数接受一个代表文件内容的blob类型参数,返回抽取的text类型文本内容。

CREATE TABLE tab (title text, body blob);

INSERT INTO tab VALUES ('test.doc', blob_import('/home/test/data.doc'));

SELECT title, length(extracttext(body)) FROM tab;

30.4.1. 使用ftutilx全文检索的联合使用方案

由于电子文档内容抽取速度较慢,为提高全文检索性能,可以在表中添加存储列,用于存储内容抽取结果或者词位列表。

方案一
CREATE EXTENSION zhparser;

CREATE TEXT SEARCH CONFIGURATION zhparsercfg (PARSER = zhparser);

ALTER TEXT SEARCH CONFIGURATION zhparsercfg ADD MAPPING FOR n,v,a,i,e,l WITH simple;

CREATE EXTENSION ftutilx;

CREATE TABLE tab (title text, body blob);

ALTER TABLE tab ADD COLUMN content text GENERATED ALWAYS AS (extracttext(body)) STORED;

CREATE INDEX tab_idx ON tab USING GIN (to_tsvector('zhparsercfg', content));

INSERT INTO tab VALUES ('test.doc', blob_import('/home/test/data.doc'));

SELECT title FROM tab WHERE to_tsvector('zhparsercfg', content) @@ to_tsquery('日志');
方案二
CREATE EXTENSION zhparser;

CREATE TEXT SEARCH CONFIGURATION zhparsercfg (PARSER = zhparser);

ALTER TEXT SEARCH CONFIGURATION zhparsercfg ADD MAPPING FOR n,v,a,i,e,l WITH simple;

CREATE EXTENSION ftutilx;

CREATE TABLE tab (title text, body blob);

ALTER TABLE tab ADD COLUMN tab_idx_col tsvector GENERATED ALWAYS AS (to_tsvector('zhparsercfg', extracttext(body))) STORED;

CREATE INDEX tab_idx ON tab USING GIN (tab_idx_col);

INSERT INTO tab VALUES ('test.doc', blob_import('/home/test/data.doc'));

SELECT title FROM tab WHERE tab_idx_col @@ to_tsquery('日志');

30.4.2. 注意事项

1) ftutilx需要依赖于jre-1.8.0运行时环境,部署后需要设置LD_LIBRARY_PATH系统环境变量包含jre-1.8.0的libjvm.so路径。

2) ftutilx.max_string_length 参数用于配置抽取结果的最大长度,但由于tsvector目前最大支持(1M-1),所以extracttext结合to_tsvector使用时,分词结果大小不能超过(1M-1)。

3) ftutilx需要创建JVM,JVM会占用较多内存。虽然调整ftutilx.jvm_option_string的-Xmx可以限制JVM的内存占用,但过小的-Xmx值会导致大文件解析时JVM发生内存不足异常。

4) 基于前面的全文检索联合使用方案,在系统内存较少的环境中,需要限制并行插入数据的会话进程数量,以免系统内存被耗尽。

30.5. 插件ftutilx卸载方法

DROP EXTENSION ftutilx;

30.6. 插件ftutilx升级方法

ALTER EXTENSION UPDATE ftutilx TO '2.0';

31. fuzzystrmatch

31.1. 插件fuzzystrmatch简介

fuzzystrmatch提供了两个字符串之间的编辑距离的相关函数,即由一个转换成另一个所需的最少编辑操作次数。

  • 插件名为fuzzystrmatch

  • 插件版本 V1.0

31.2. 插件fuzzystrmatch加载方式

使用时需要create extension fuzzystrmatch。

示例:

create extension fuzzystrmatch;

31.3. 插件fuzzystrmatch参数配置

无需配置任何参数

31.4. 插件fuzzystrmatch使用方法

31.4.1. levenshtein

计算两个字符串之间编辑距离。

语法

levenshtein(t1 text, t2 text ) RETURNS int;

参数

t1

源字符串。

t2

目标字符串。

示例

TEST=# select levenshtein('text','tst');
 levenshtein
-------------
                   2
(1 行记录)

TEST=# select levenshtein('text','test');
 levenshtein
-------------
                   1
(1 行记录)

TEST=# select levenshtein('text','text');
 levenshtein
-------------
                   0
(1 行记录)

31.4.2. 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的代价权重。

示例

TEST=# select levenshtein('tet','text', 1 ,2 ,3);
 levenshtein
-------------
                   1
(1 行记录)

TEST=# select levenshtein('tet','text', 2 ,2 ,3);
 levenshtein
-------------
                   2
(1 行记录)

TEST=# select levenshtein('tet','text', 2 ,2 ,3);
 levenshtein
-------------
                   2
(1 行记录)

31.4.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);
 levenshtein_less_equal
------------------------
                                          3
(1 row)

SELECT levenshtein_less_equal('extensive', 'exhaustive', 4);
 levenshtein_less_equal
------------------------
                                          4
(1 row)

31.4.4. levenshtein_less_equal_with_costs

与上述函数相似,增加如levenshtein_with_costs一样的代价花销。

31.4.5. metaphone

计算字符串的metaphone键。

语法

metaphone(text, int) returns text。

语法

text

参与计算的字符串。

int

参与运算的参考键值。

示例

SELECT metaphone('GUMBO', 4);
 metaphone
-----------
 KM
(1 row)

31.4.6. soundex, text_soundex

生成字符串的soundex键。

语法

soundex(text) rerturns text。

参数

text

参与计算的字符串。

示例

TEST=# select soundex('A500');
 soundex
---------
 A000
(1 行记录)

TEST=# select soundex('A529sd800');
 soundex
---------
 A230
(1 行记录)

TEST=# select soundex('A529sds800');
 soundex
---------
 A232
(1 行记录)

TEST=# select soundex('hello world');
 soundex
---------
 H464
(1 行记录)

31.4.7. difference

获得两个对比的字符串转换为soundex值后匹配的位数。

语法

difference(t1 text, t2 text) RETURNS int;

参数

t1

参与计算的字符串1。

t2

参与计算的字符串2。

示例

TEST=# select difference('ab', 'as');
 difference
------------
                  3
(1 行记录)

TEST=# select difference('ab', 'ab');
 difference
------------
                  4
(1 行记录)

31.4.8. dmetaphone

获取text的dmetaphone。

语法

dmetaphone(text) returns text。

参数

text

参与计算的text字符串。

示例

TEST=# select dmetaphone('tetx');
 dmetaphone
------------
 TTKS
(1 行记录)

31.5. 插件fuzzystrmatch卸载方法

不需要fuzzystrmatch插件只需要卸载插件即可。

示例

drop extension fuzzystrmatch;

31.6. 插件fuzzystrmatch升级方法

fuzzystrmatch扩展插件通常随KingbaseES安装包一并升级。通常情况下用户无法单独升级插件。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值