天天看點

PostgreSQL 安裝PYTHON擴充,通路頁面或者第三方程式

PostgreSQL 安裝PYTHON擴充,通路頁面或者第三方程式

應用場景當資料庫中relation表中有資料插入、更新、删除操作,postgresql 調用第三方接口,進行處理。這裡用pgsq 中python的擴充插件來實作。

1、安裝PostgreSQL中的Python 插件

      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;

  

PostgreSQL 安裝PYTHON擴充,通路頁面或者第三方程式

    如:報錯"

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

"

        1、 複制C:\Python37\DLLs\python3.dll到C:\Program Files\PostgreSQL\12\lib下 重命名python37.dll

PostgreSQL 安裝PYTHON擴充,通路頁面或者第三方程式

    繼續執行如果還報錯,将python37.dll  複制到C:\Window\System32 下,執行成功

  

PostgreSQL 安裝PYTHON擴充,通路頁面或者第三方程式

  

  1.2  安裝plpython3u 在liunx環境

   檢查pgsql 是否安裝插件plpython3u,在 界面上輸入 su postgres 切換至postgres使用者,輸入psql 進入查詢語句,輸入select name from pg_available_extensions; 檢視安裝的擴充,如下圖: 

PostgreSQL 安裝PYTHON擴充,通路頁面或者第三方程式

     這裡發現沒有裝擴充plpython3u,進入https://www.postgresql.org/download/linux/redhat/,點選下圖位置:

   

PostgreSQL 安裝PYTHON擴充,通路頁面或者第三方程式

      進入版本選擇界面,選擇相應的Linux的版本以及postgresql版本:檢視postgresql版本,如下:

      

PostgreSQL 安裝PYTHON擴充,通路頁面或者第三方程式

    檢視linux 版本,見下圖:

    

PostgreSQL 安裝PYTHON擴充,通路頁面或者第三方程式

      點選選擇相應的版本:

     

PostgreSQL 安裝PYTHON擴充,通路頁面或者第三方程式

      下載下傳對應的python擴充安裝包:

    

PostgreSQL 安裝PYTHON擴充,通路頁面或者第三方程式

      将下載下傳好的 postgresql11-plpython3-11.7-1PGDG.rhel8.x86_64.rpm 放入伺服器的tmp目錄

       cd /tmp     

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

     

PostgreSQL 安裝PYTHON擴充,通路頁面或者第三方程式

      安裝成功後,可以在pgsql的查詢器中檢視到有了python的擴充。

    

PostgreSQL 安裝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上通過界面,建立觸發器綁定觸發器函數:

PostgreSQL 安裝PYTHON擴充,通路頁面或者第三方程式
PostgreSQL 安裝PYTHON擴充,通路頁面或者第三方程式

 5、測試是否生效

PostgreSQL 安裝PYTHON擴充,通路頁面或者第三方程式
PostgreSQL 安裝PYTHON擴充,通路頁面或者第三方程式

 ok 測試成功!