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

105. unaccent

105.1. 插件unaccent简介

unaccent是一个文本搜索字典,它能从词位中移除重音(附加符号)。它是一个过滤词典,这表示它的输出总是会被传递给下一个字典(如果有),这和字典的通常行为不同。这允许为全文搜索做与重音无关的处理。

unaccent的当前实现不能被用作thesaurus字典的正规化字典。

105.2. 插件unaccent加载方式

create extension unaccent;

105.3. 插件unaccent的参数配置

unaccent字典接受下列选项:

* RULES是包含翻译规则列表的文件的基本名。这个文件必须被存储在$SHAREDIR/tsearch_data/(这里$SHAREDIR表示KES安装的共享数据目录)中。它的名称必须以.rules(不包含在RULES参数中)结束。

规则文件具有下面的格式:

* 每一行表示一个由带有重音的字符和不带重音的字符构成的对。第一个字符将被翻译成第二个。例如:

À        A
Ằ        A
Ặ        A

两个字符必须由空格分隔,并且一行上的任何前导或尾随空白都将被忽略。

* 或者,如果一行只给出一个字符,则删除该字符的实例; 这在用单独的字符表示重音的语言中是有用的。

* 实际上,每个“字符”可以是不包含空格的任何字符串,因此, 除了去除变音符之外,unaccent字典也可以用于其他类型的字符串替换。

* 规则文件必须以UTF-8编码方式存储。加载时,数据将自动转换为当前数据库的编码。 任何含有不可翻译字符的行都将被忽略,因此规则文件可以包含当前编码中不适用的规则。 在unaccent.rules中可以找到一个更完整的例子,它可以直接用于大部分欧洲语言,当unaccent模块被安装时,它被安装在$SHAREDIR/tsearch_data/中。

105.4. 插件unaccent的使用方法

安装unaccent扩展会创建一个文本搜索模板unaccent和一个基于前者的字典unaccent。unaccent字典有默认的参数设置RULES='unaccent',这会让该字典使用标准的unaccent.rules文件。如果希望修改该参数,可以

alter text search dictionary unaccent (rules='my_rules');

其中my_rules需要用户自行建立。

或者基于该模板创建新的字典。

要测试该字典,可以尝试如下方法:

select ts_lexize('unaccent','Hộtel');
ts_lexize
-----------
{Hotel}
(1 row)

这里是一个展示把unaccent字典插入到一个文本搜索配置的例子:

create text search configuration fr ( copy = french );

alter text search configuration fr
        alter mapping for hword, hword_part, word
        with unaccent, french_stem;

select to_tsvector('fr','Hộtels de la Mer');
    to_tsvector
-------------------
 'hotel':1 'mer':4
(1 row)

select to_tsvector('fr','Hộtel de la Mer') @@ to_tsquery('fr','Hotels');
 ?column?
----------
 t
(1 row)

select ts_headline('fr','Hộtel de la Mer',to_tsquery('fr','Hotels'));
      ts_headline
------------------------
 <b>Hộtel</b> de la Mer
(1 row)

unaccent()函数从一个给定的字符串中移除重音(附加符号)。基本上,它是unaccent字典的一个包装器,但是它能在普通的文本搜索环境之外使用。

unaccent([dictionary regdictionary, ] string text) returns text

如果省略dictionary参数,则使用名为unaccent并且与unaccent()函数有相同模式的文本搜索词典。

例如:

select unaccent('unaccent', 'Hộtel');
 unaccent
-----------
 Hotel
(1 row)


select unaccent('Hộtel');
 unaccent
-----------
 Hotel
(1 row)

105.5. 插件unaccent卸载方法

drop extension unaccent;

105.6. 插件unaccent升级方法

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

106. utl_file

106.1. 插件utl_file简介

插件utl_file补充了一些对于文件操作的函数。

  • 插件名为 utl_file

  • 插件版本 V1.0

106.2. 插件utl_file加载方式

在命令行执行create extension utl_file;

示例

create extension utl_file;

106.3. 插件utl_file的参数配置

无需配置任何参数

106.4. 插件utl_file的使用方法

加载插件ltree后,按照如下方式使用相应功能

106.4.1. utl_file.fopen

utl_file.fopen打开一个文件,返回一个文件句柄

语法

fopen(location text, filename text, open_mode text, max_linesize integer, encoding name) 返回integer
fopen(location text, filename text, open_mode text, max_linesize integer) 返回integer

参数

location:指定文件的位置。

filename:指定要打开的文件名。

open_mode:指定文件要打开的模式。

encoding:指定编码字符集。

返回值

UTL_FILE.FILE_TYPE(int类型)。 open_mode可以是'R','W','A'。utl_file.fopen为procedure。

示例

DROP DIRECTORY IF EXISTS MY_DIR;

CREATE DIRECTORY MY_DIR AS '/tmp/'; -- 这个目录需要存在,或者人为手工创建。

    DROP PROCEDURE IF EXISTS TEST_FOPEN;

    \set SQLTERM /

CREATE OR REPLACE PROCEDURE TEST_FOPEN(
        V_OUT_DATA IN VARCHAR2,
        V_SQLPARAM IN VARCHAR2
) AS
DECLARE
        OUT_DATA VARCHAR2(30000);
        FILE_HANDLE UTL_FILE.FILE_TYPE;
        FILD_NAME VARCHAR2(1000) DEFAULT 'output.txt';
BEGIN
        OUT_DATA := V_OUT_DATA;
        FILE_HANDLE := UTL_FILE.FOPEN('MY_DIR', FILD_NAME, 'A', 30000);
        UTL_FILE.PUT_LINE(FILE_HANDLE, OUT_DATA);
        UTL_FILE.PUT_LINE(FILE_HANDLE, V_SQLPARAM);
        UTL_FILE.FCLOSE(FILE_HANDLE);
END TEST_FOPEN;
    /

    \set SQLTERM ;

CALL TEST_FOPEN('111', '222'); --执行成功后可看到输入的文字。

    \! cat /tmp/output.txt

106.4.2. utl_file.put_line

utl_file.put_line在文件中写入一行内容

语法

put_line(file file_type, buffer text);
put_line(file file_type, buffer text, autoflush bool);

参数

file:指定UTL_FILE.FILE_TYPE类型值。

buffer:指定目标文件名。

autoflush:指定是否自动刷新。

返回值

无返回值。

注解

utl_file.put_line为procedure。

示例

DROP DIRECTORY IF EXISTS MY_DIR;

    CREATE DIRECTORY MY_DIR AS '/tmp/'; -- 这个目录需要存在,或者人为手工创建。

DROP PROCEDURE IF EXISTS TEST_FOPEN;

\set SQLTERM /

    CREATE OR REPLACE PROCEDURE TEST_PUT_LINE(
            V_OUT_DATA IN VARCHAR2,
            V_SQLPARAM IN VARCHAR2
    )
    AS
    DECLARE
            OUT_DATA VARCHAR2(30000);
            FILE_HANDLE UTL_FILE.FILE_TYPE;
            FILD_NAME VARCHAR2(1000) DEFAULT 'output.txt';
    BEGIN
            OUT_DATA := V_OUT_DATA;
            FILE_HANDLE := UTL_FILE.FOPEN('MY_DIR', FILD_NAME, 'A', 30000);
            UTL_FILE.PUT_LINE(FILE_HANDLE, OUT_DATA);
            UTL_FILE.PUT_LINE(FILE_HANDLE, V_SQLPARAM);
            UTL_FILE.FCLOSE(FILE_HANDLE);
    END TEST_PUT_LINE;
        /

        \set SQLTERM ;

    call TEST_PUT_LINE('111', '222'); --执行成功后可看到输入的文字。

        \! cat /tmp/output.txt

106.4.3. utl_file.put

utl_file.put将数据强制写入到文件中

语法

put(file file_type, buffer text);

参数

file:指定UTL_FILE.FILE_TYPE类型值。 buffer:指定目标文件名。

返回值

无返回值

注解

utl_file.put为procedure。

示例

同utl_file.putline。

106.4.4. utl_file.fclose

utl_file.fclose关闭目标文件

语法

fclose(file file_type);

参数

file指定UTL_FILE.FILE_TYPE类型值。

返回值

无返回值。

返回值

utl_file.fclose为procedure。

示例

    \set SQLTERM /

CREATE or replace PROCEDURE proc1()
as
DECLARE
        dirname                  VARCHAR(100) DEFAULT 'my_dir';
        v_empfile_src    UTL_FILE.FILE_TYPE;
        v_empfile_tgt    UTL_FILE.FILE_TYPE;
        v_src_file       VARCHAR(20) DEFAULT 'output.txt';
        v_dest_file      VARCHAR(20) DEFAULT 'test.txt';
        v_empline        VARCHAR(200);
begin
        v_empfile_src = UTL_FILE.FOPEN(dirname,v_src_file,'r');
        v_empfile_tgt = UTL_FILE.FOPEN(dirname,v_dest_file,'w');
  LOOP
         BEGIN
         UTL_FILE.GET_LINE(v_empfile_src,v_empline);
         UTL_FILE.PUT(v_empfile_tgt,v_empline);
         UTL_FILE.NEW_LINE(v_empfile_tgt);
         UTL_FILE.FFLUSH(v_empfile_tgt);
         EXCEPTION
          WHEN OTHERS THEN
                EXIT;
         END;
  END LOOP;
  DBMS_OUTPUT.PUT_LINE('Updated file: ' || v_dest_file);
  UTL_FILE.FCLOSE(v_empfile_tgt);
  UTL_FILE.FCLOSE(v_empfile_src);
END proc1;
    /

    \set SQLTERM ;

106.4.5. utl_file.fclose_all

utl_file.fclose_all关闭所有文件

语法

utl_file.fclose_all();

参数

无参数

返回值

无返回值。

注解

utl_file.fclose_all为procedure。

示例

    \set SQLTERM /

CREATE OR REPLACE FUNCTION read_file(dir text) RETURNS void AS $$
DECLARE
  f utl_file.file_type;
BEGIN
  f := utl_file.fopen(dir, 'regress_orafce.txt', 'r');
  FOR i IN 1..11 LOOP
        RAISE NOTICE '[%] >>%<<', i, utl_file.get_line(f);
  END LOOP;
  RAISE NOTICE '>>%<<', utl_file.get_line(f, 4);
  RAISE NOTICE '>>%<<', utl_file.get_line(f, 4);
  RAISE NOTICE '>>%<<', utl_file.get_line(f);
  RAISE NOTICE '>>%<<', utl_file.get_line(f);
  EXCEPTION
        -- WHEN no_data_found THEN,  8.1 plpgsql doesn't know no_data_found
        WHEN others THEN
          RAISE NOTICE 'finish % ', sqlerrm;
          RAISE NOTICE 'is_open = %', utl_file.is_open(f);
          PERFORM utl_file.fclose_all();
          RAISE NOTICE 'is_open = %', utl_file.is_open(f);
  END;
$$ LANGUAGE plpgsql;
    /

    \set SQLTERM ;

106.4.6. utl_file.get_line

utl_file.get_line返回文件的一行。

语法

get_line(file integer, OUT buffer text);
get_line(file integer, OUT buffer text, len integer);

参数

file:指定UTL_FILE.FILE_TYPE类型值。

buffer:指定输出的文件。

len:指定想要输出的特定行。

返回值

无返回值。

注解

utl_file.get_line为procedure。

示例

    \set SQLTERM /

CREATE OR REPLACE PROCEDURE TEST_GET_LINE as
        vInHandle UTL_FILE.FILE_TYPE;
        vNewLine  VARCHAR2(250);
BEGIN
  vInHandle = utl_file.fopen('MY_DIR', 'test.txt','R');
  utl_file.get_line(vInHandle, vNewLine);
  RAISE NOTICE '>>%<<', vNewLine;
  utl_file.fclose(vInHandle);
END TEST_GET_LINE;
    /

    \set SQLTERM ;

106.4.7. utl_file.new_line

utl_file.new_line为文本增加行终止符。

语法

new_line(file integer);
new_line(file integer, lines int);

参数

file:指定UTL_FILE.FILE_TYPE类型值。

lines:指定需要操作的行数。

返回值

无返回值。

注解

utl_file.new_line为procedure。

示例

    \set SQLTERM /

CREATE DIRECTORY MY_DIR AS '/tmp/';
declare
        vInHandle utl_file.file_type;
begin
        vInHandle := utl_file.fopen('MY_DIR', 'output.txt', 'w');
        utl_file.new_line(vInHandle, 2);
        utl_file.fclose(vInHandle);
end;
    /

    \set SQLTERM ;

106.4.8. utl_file.fflush

utl_file.fflush清空目标文件。

语法

fflush(file integer);

参数

file指定UTL_FILE.FILE_TYPE类型值。

返回值

无返回值。

注解

utl_file.fflush为procedure。

示例

    \set SQLTERM /

CREATE or replace PROCEDURE proc1()
as
  DECLARE
        dirname                  VARCHAR(100) DEFAULT 'my_dir';
        v_empfile_src    UTL_FILE.FILE_TYPE;
        v_empfile_tgt    UTL_FILE.FILE_TYPE;
        v_src_file       VARCHAR(20) DEFAULT 'output.txt';
        v_dest_file      VARCHAR(20) DEFAULT 'test.txt';
        v_empline        VARCHAR(200);
begin
        v_empfile_src = UTL_FILE.FOPEN(dirname,v_src_file,'r');
        v_empfile_tgt = UTL_FILE.FOPEN(dirname,v_dest_file,'w');
  LOOP
         BEGIN
         UTL_FILE.GET_LINE(v_empfile_src,v_empline);
         UTL_FILE.PUT(v_empfile_tgt,v_empline);
         UTL_FILE.NEW_LINE(v_empfile_tgt);
         UTL_FILE.FFLUSH(v_empfile_tgt);
         EXCEPTION
          WHEN OTHERS THEN
                EXIT;
         END;
  END LOOP;
  DBMS_OUTPUT.PUT_LINE('Updated file: ' || v_dest_file);
  UTL_FILE.FCLOSE(v_empfile_tgt);
  UTL_FILE.FCLOSE(v_empfile_src);
END proc1;
    /

    \set SQLTERM ;

106.5. 插件utl_file卸载方法

卸载时drop extension utl_file即可。

示例

drop extension utl_file;

106.6. 插件utl_file升级方法

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

107. uuid-ossp

107.1. 插件uuid-ossp简介

插件uuid-ossp是uuid生成工具。

  • 插件名为 uuid-ossp

  • 插件版本 V1.0

107.2. 插件uuid-ossp加载方式

使用时需要在命令行执行create extension "uuid-ossp";

示例:

create extension "uuid-ossp";

107.3. 插件uuid-ossp的参数配置

无需配置任何参数。

107.4. 插件uuid-ossp的使用方法

加载插件uuid-ossp后,用uuid_generate_v1()或uuid_generate_v4()函数生成UUID值。 uuid_generate_v1()与计算机的MAC地址和时间戳有关。 uuid_generate_v4()生成随机的uuid。

示例:

select uuid_generate_v1();
            uuid_generate_v1
--------------------------------------
c12bedf0-d7b4-11ec-8340-20040feac55c
(1 行记录)

select uuid_generate_v4();
            uuid_generate_v4
--------------------------------------
83e19b37-8195-4823-a6b7-82a1ed5cc668
(1 行记录)

107.5. 插件uuid-ossp卸载方法

卸载时drop extension uuid-ossp即可。

示例:

drop extension "uuid-ossp";

107.6. 插件uuid-ossp升级方法

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值