zoukankan      html  css  js  c++  java
  • PostgreSQL 安装扩展插件plpython3u执行python,访问页面或者第三方程序

    应用场景当数据库中relationtable表中有数据插入、更新、删除操作,postgresql 调用第三方接口,进行处理。这里用pgsq 中python的扩展插件来实现。

    1、安装PostgreSQL中的plpython3u 插件

          1.1  安装plpython3u 在windows环境

      我本地的pgsql 安装的是pgsql12的版本,由于版本的不同,需要下载的python 版本也不同。12版本python3.7 可以具体下载地址:https://www.python.org/ftp/python/3.7.7/python-3.7.7-amd64.exe 

        检查Postgresql的安装目录下面的 lib 文件夹有没有 plpython3.dll 。这是Postgresql 调用Python 3.X的DLL文件.如果是老的pgsql9之前的版本调用的是plpythonu.dll对应的python2.x的版本。

          参考文章:https://blog.csdn.net/weixin_34405332/article/details/92575854

           新建QueryTool,执行 CREATE EXTENSION plpython3u;

      

        如:报错"ERROR: could not load library "C:/Program Files/PostgreSQL/12/lib/plpython3.dll": The specified module could not be found."

             复制C:Python37DLLspython3.dllC:Program FilesPostgreSQL12lib下 重命名python37.dll

           

        继续执行如果还报错,将python37.dll  复制到C:WindowSystem32 下,执行成功

        

      1.2  安装plpython3u 在linux环境

       检查pgsql 是否安装插件plpython3u,在 界面上输入 su postgres 切换至postgres用户,输入psql 进入查询语句,输入select name from pg_available_extensions; 查看安装的扩展,如下图: 

              

         这里发现没有装扩展plpython3u,进入https://www.postgresql.org/download/linux/redhat/,点击下图位置:

       

          进入版本选择界面,选择相应的Linux的版本以及postgresql版本:查看postgresql版本,如下:

          

        查看linux 版本,见下图:

        

          点击选择相应的版本:

         

          下载对应的python扩展安装包:

        

          将下载好的 postgresql11-plpython3-11.7-1PGDG.rhel8.x86_64.rpm 放入服务器的tmp目录

           cd /tmp     

        rpm -ivh  postgresql11-plpython3-11.7-1PGDG.rhel8.x86_64.rpm

         

          安装成功后,可以在pgsql的查询器中查看到有了python的扩展。

        

         在pgadmin连接工具中,运行 CREATE PROCEDURAL LANGUAGE plpython3u; 运行成功

    2、创建运行Python的自定义函数  

    CREATE OR REPLACE FUNCTION httpclient()
      RETURNS text AS
    $BODY$
    import urllib.request
    url="https://www.baidu.com/"
    req=urllib.request.Request(url)
    resp=urllib.request.urlopen(req)
    data=resp.read().decode('utf-8')
    return data
    $BODY$
    LANGUAGE 'plpython3u' VOLATILE;
    

      这里用python创建一个访问baidu的自定义函数。BODY 里面放入运行的python语句,LANGUAGE 后接 要执行的扩展插件

    3、创建触发器函数

    CREATE fUNCTION relationtabletrigger() Returns trigger As $relationtabletrigger$
    BEGIN 
     If(TG_OP='INSERT' or TG_OP='UPDATE' or  TG_OP='DElETE' ) THEN
        INSERT INTO public.baidu(
    	html)
    	VALUES (httpclient());
     END IF;
     RETURN null;
    END;
    $RelationTableTrigger$ LANGUAGE plpgsql;
    

      当新增、更新、删除的时候,将httpclient的内容,存入到baidu的表里面

    4、表绑定触发器函数

      将relationtable表新建一个触发器并绑定,如下图:  

    CREATE TRIGGER testtriggers
        BEFORE INSERT OR DELETE OR UPDATE 
        ON public.relationtable
        FOR EACH ROW
        EXECUTE PROCEDURE public.relationtabletrigger();
    

      也可以直接在pgadmin上通过界面,新建触发器绑定触发器函数:

    5、测试是否生效

     

      ok 测试成功!

  • 相关阅读:
    美容:盐水按摩 靓肤不花钱 健康程序员,至尚生活!
    关于黑眼圈形成和应对方法! 健康程序员,至尚生活!
    女人必知25个养颜排毒美容锦囊 健康程序员,至尚生活!
    让你睡眠更香甜的九种食物 健康程序员,至尚生活!
    几款美容瘦身的花茶配方 健康程序员,至尚生活!
    吃出来的美白方法 健康程序员,至尚生活!
    达人DIY护肤经验分享 健康程序员,至尚生活!
    【男士必看】男士护肤必备攻略 健康程序员,至尚生活!
    一起学习手撕包菜如何做 健康程序员,至尚生活!
    抵制美食诱惑 春节美食瘦身建议 健康程序员,至尚生活!
  • 原文地址:https://www.cnblogs.com/whitebai/p/12924270.html
Copyright © 2011-2022 走看看