Postgresql

如何在 PostgreSQL 中獲取 YAML Python 庫

  • November 12, 2020

我想在一些 plpython 程式碼中使用 YAML,但 YAML 不包含在 PostgreSQL 的 python3 擴展中。

我的“import yaml”收到一個錯誤,它找不到 yaml。

在我的正常 Python3 安裝中,我執行了“pip3 install yaml”,效果很好。

如何將 yaml 安裝到 PostgreSQL 中?

謝謝。

更多資訊以供澄清:

這是 PG 中定義的函式的開始:

-- Default audit trigger
create or replace function sys_audit() returns trigger language plpython3u AS $$
 from sys import path
 path.append('/usr/local/lib/ez-python-library/PostgreSQL/bin');

 from datetime import datetime
 from CommonRowFunctions import getPkValue, getRowValue, getRowChanges

 keyVal    = ''
 modData   = 'unknown'
...

模組“CommonRowFunctions”嘗試使用 YAML 來配置日誌記錄。該模組位於我的 python 庫中(PostgreSQL 外部)。如果我為日誌配置使用屬性文件,這一切都有效,但使用字典是首選方法,YAML 使這非常容易。

這是 EnterpriseDB 特有的問題。PostgreSQL 不提供 Python,它只是提供一個 contrib 模組,您的發行版設置為針對系統的 Python 建構。在 Windows 的情況下,沒有 Python 可供他們建構,因為沒有分發。當您下載“python”(更準確地說是 cpython)時,您可以獲得任何版本的 Python。因此,EnterpriseDB 將他們提供的 Python 版本捆綁為 PostgreSQL 的發行版。以前,它們捆綁了靜態連結的 Active State Python,現在它們捆綁了 cPython 3.3(它們可以動態連結)。這全部來自這裡的文件

但是,要將您的系統配置為使用 EnterpriseDB Python,您首先需要執行幾個步驟。來自配置文件

安裝語言包後,必須設置以下變數: setPYTHONHOME=C:\edb\languagepack-9.6\x64\Python-3.3

使用以下命令將 Python、Perl 和 Tcl 添加到您的搜尋路徑:

set PATH= C:\edb\LanguagePack-9.6\x64\Python-3.3\bin: C:\edb\LanguagePack-9.6\x64\Perl-5.20\bin: C:\edb\LanguagePack-9.6\x64\Tcl-8.5\bin:%PATH%

在設置了在 Windows 上配置語言包所需的系統特定步驟後,重新啟動 Advanced Server 數據庫伺服器;有關重新啟動伺服器的詳細資訊,請參閱第 5 節。

Linux 和 OSX 提供了類似的說明

配置之後,pip應該easy_install可以正常工作。

確保您正在使用plpythonu而不是plpython. 然後安裝 yaml,或者pyYaml確保它工作正常。然後只需添加導入語句。

引用自:https://dba.stackexchange.com/questions/201693