PLPython Fenced 模式
在fenced 模式中添加plpython 非安全语言。在数据库编译时需要将python 集成进数据
库中,
在configure 阶段加入--with-python 选项。
同时也可指定安装plpython 的python 路径,
添加选项--with-includes='/python-dir=path'。
在启动数据库之前配置GUC 参数unix_socket_directory ,指定unix_socket 进程间通讯
的文件地址。用户需要提前在user-set-dir-path 下创建文件夹,并将文件夹权限修改为可读
可写可执行状态。
unix_socket_directory = '/user-set-dir-path'
配置完成,启动数据库。
将plpython 加入数据库编译,并设置好GUC 参数unix_socket_directory 后,在启动数
据库的过程中,
自动创建fenced-Master 进程。
在数据库不进行python 编译的情况下,fenced
模式需要手动拉起master 进程,在GUC 参数设置完成后,输入创建master 进程命令。
启动fenced-Master 进程,命令为:
gaussdb --fenced -k /user-set-dir-path -D /user-set-dir-path &
完成fence 模式配置,针对plpython-fenced UDF 数据库将在fenced-worker 进程中执行
UDF 计算。
使用指导
创建extension
当编译的plpython 为python2 时:
gsql=# create extension plpythonu;
CREATE EXTENSION
GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
411
当编译的plpython 为python3 时:
gsql=# create extension plpython3u;
CREATE EXTENSION
下面示例是以python2 为例。
创建plpython-fenced UDF
查看UDF 信息
gsql=# select * from pg_proc where proname='pymax';
gsql=# create or replace function pymax(a int, b int)
gsql-# returns INT
gsql-# language plpythonu fenced
gsql-# as $$
gsql$# import numpy
gsql$# if a > b:
gsql$#
return a;
gsql$# else:
gsql$#
return b;
gsql$# $$;
CREATE FUNCTION
运行UDF
创建一个数据表:
gsql=# create table temp (a int ,b int) ;
CREATE TABLE
gsql=# insert into temp values (1,2),(2,3),(3,4),(4,5),(5,6);
INSERT 0 5
运行UDF:
gsql=# select pymax(a,b) from temp;
pymax
-------
2
3
4
5
6
(5 rows)
GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
412