暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MogDB 全流程AI PLPython Fenced模式

原创 由迪 2022-12-06
598

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进程,命令为:

mogdb --fenced -k /user-set-dir-path -D /user-set-dir-path &

完成fence模式配置,针对plpython-fenced UDF数据库将在fenced-worker进程中执行UDF计算。

使用指导

  • 创建extension

    • 当编译的plpython为python2时:

      MogDB=# create extension plpythonu; CREATE EXTENSION
    • 当编译的plpython为python3时:

      MogDB=# create extension plpython3u; CREATE EXTENSION

    下面示例是以python2为例。

  • 创建plpython-fenced UDF

    MogDB=# create or replace function pymax(a int, b int) MogDB-# returns INT MogDB-# language plpythonu fenced MogDB-# as $$ MogDB$# import numpy MogDB$# if a > b: MogDB$# return a; MogDB$# else: MogDB$# return b; MogDB$# $$; CREATE FUNCTION
  • 查看UDF信息

    MogDB=# select * from pg_proc where proname='pymax'; -[ RECORD 1 ]----+-------------- proname | pymax pronamespace | 2200 proowner | 10 prolang | 16388 procost | 100 prorows | 0 provariadic | 0 protransform | - proisagg | f proiswindow | f prosecdef | f proleakproof | f proisstrict | f proretset | f provolatile | v pronargs | 2 pronargdefaults | 0 prorettype | 23 proargtypes | 23 23 proallargtypes | proargmodes | proargnames | {a,b} proargdefaults | prosrc | | import numpy | if a > b: | return a; | else: | return b; | probin | proconfig | proacl | prodefaultargpos | fencedmode | t proshippable | f propackage | f prokind | f proargsrc |
  • 运行UDF

    • 创建一个数据表:

      MogDB=# create table temp (a int ,b int) ; CREATE TABLE MogDB=# insert into temp values (1,2),(2,3),(3,4),(4,5),(5,6); INSERT 0 5
    • 运行UDF:

      MogDB=# select pymax(a,b) from temp; pymax ------- 2 3 4 5 6 (5 rows)
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论