unaccent是一个文本搜索字典,它能从词位中移除重音(附加符号)。它是一个过滤词典,这表示它的输出总是会被传递给下一个字典(如果有),这和字典的通常行为不同。这允许为全文搜索做与重音无关的处理。
unaccent的当前实现不能被用作thesaurus字典的正规化字典。
create extension unaccent;
unaccent字典接受下列选项:
* RULES是包含翻译规则列表的文件的基本名。这个文件必须被存储在$SHAREDIR/tsearch_data/(这里$SHAREDIR表示KES安装的共享数据目录)中。它的名称必须以.rules(不包含在RULES参数中)结束。
规则文件具有下面的格式:
* 每一行表示一个由带有重音的字符和不带重音的字符构成的对。第一个字符将被翻译成第二个。例如:
À A Ằ A Ặ A
两个字符必须由空格分隔,并且一行上的任何前导或尾随空白都将被忽略。
* 或者,如果一行只给出一个字符,则删除该字符的实例; 这在用单独的字符表示重音的语言中是有用的。
* 实际上,每个“字符”可以是不包含空格的任何字符串,因此, 除了去除变音符之外,unaccent字典也可以用于其他类型的字符串替换。
* 规则文件必须以UTF-8编码方式存储。加载时,数据将自动转换为当前数据库的编码。 任何含有不可翻译字符的行都将被忽略,因此规则文件可以包含当前编码中不适用的规则。 在unaccent.rules中可以找到一个更完整的例子,它可以直接用于大部分欧洲语言,当unaccent模块被安装时,它被安装在$SHAREDIR/tsearch_data/中。
安装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
------------------------
Hộtel 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)
drop extension unaccent;
unaccent扩展插件通常随着KingbaseES安装包一并升级。通常情况下用户无须单独升级些插件。
插件utl_file补充了一些对于文件操作的函数。
插件名为 utl_file
插件版本 V1.0
在命令行执行create extension utl_file;
示例
create extension utl_file;
无需配置任何参数
加载插件ltree后,按照如下方式使用相应功能
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
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
utl_file.put将数据强制写入到文件中
语法
put(file file_type, buffer text);
参数
file:指定UTL_FILE.FILE_TYPE类型值。 buffer:指定目标文件名。
返回值
无返回值
注解
utl_file.put为procedure。
示例
同utl_file.putline。
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 ;
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 ;
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 ;
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 ;
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 ;
卸载时drop extension utl_file即可。
示例
drop extension utl_file;
utl_file扩展插件通常随着KingbaseES安装包一并升级。通常情况下用户无须单独升级些插件。
插件uuid-ossp是uuid生成工具。
插件名为 uuid-ossp
插件版本 V1.0
使用时需要在命令行执行create extension "uuid-ossp";
示例:
create extension "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 行记录)
卸载时drop extension uuid-ossp即可。
示例:
drop extension "uuid-ossp";
uuid-ossp扩展插件通常随着KingbaseES安装包一并升级。通常情况下用户无须单独升级些插件。