無法為 Postgresql12 安裝 pl/python
為了讓顯而易見的事情發生,我的問題是在閱讀了像這樣的許多其他問題後發布的
https://stackoverflow.com/questions/60683776/install-pl-python-on-windows-for-postgresql-12 但我嘗試使用 pl/python 時已經卡住了大約一個半月。我正在使用 Postgresql 12 和 enterprisedb 包,包括 pgadmin4 作為 gui 和語言包。所以應該包含PL python。當我執行“CREATE EXTENSION plpython3u;”時
我收到以下消息 ERROR: The library “C: /Program Files / PostgreSQL / 12 / lib / plpython3.dll” could not be loaded: The specified module could not be found. SQL state: 58P01which is the classic
"ERROR: could not load library "C:/Program Files/PostgreSQL/12/lib/plpython3.dll": The specified module could not be found."
根據閱讀多篇文章和文章,我的理解是需要 2 個元素
1.正確的python解釋器
Python 執行時需要與 PostgresSQL 版本相匹配 PostgreSQL 文件夾中的文件表明過程語言 pl/Perl、pl/Python 和 pl/Tcl 包含在此 PostgreSQL 發行版中。該伺服器是使用這些語言解釋器的 LanguagePack 社區發行版建構的。要在 PostgreSQL 中使用這些語言中的任何一種,請下載並安裝適當的解釋器,並確保它們包含在啟動數據庫伺服器的 PATH 變數中。使用的版本如下所示 - 較新的次要(錯誤修復)版本也可能有效,但尚未經過測試:
* Python 3.7
此外,當通過軟體“dependency walker”執行在 C:\program files\postgresql\12\lib 中找到的 plpython3.DLL 時,我得到以下結果:
這意味著-它確實是文件中提到的python 3.7。- 找到依賴項。
2.設置環境變數PATH和PYTHONHOME
現在文件 https://www.enterprisedb.com/edb-docs/d/edb-postgres-advanced-server/user-guides/language-pack-guide/12/EDB_Postgres_Language_Pack_Guide.1.09.html# 和論壇幫助管理員 https://postgresrocks.enterprisedb.com/t5/PostgreSQL/unable-to-install-pl-python-extension/td-p/4059/
提到需要更改環境變數 PATH 和 PYTHONHOME。類似的東西
set PYTHON_HOME=c:\ edb\languagepack\v1\Python-3.7
和
set PATH=C:\edb\languagepack\v1\Python-3.7;C:\edb\languagepack\v1\Perl-5.26\bin; C:\edb\languagepack\v1\Tcl-8.6\bin;%PATH%
論壇提到您需要使用命令提示符更改它們。該文件並未具體說明您應該如何執行此操作,但我認為這意味著python解釋器本身
無論哪種方式它都不起作用。當我使用命令提示符時沒有答案:沒有錯誤,沒有什麼。它只是在另一條線上開始新的。在 python 解釋器中,語法無效。當我在 pgadmin 中使用查詢時,我遇到了同樣的錯誤。我看到了其他可能的方法,例如批處理文件或 Windows 設置,但它似乎完全不同。
在被困這麼久之後,我真的很想繼續前進,並且非常感謝一些見解。
在命令提示符下使用
set
不會在成功時提供回饋。要驗證它是否實際設置,您將執行echo %PYTHON_HOME%
. 但看起來你有一個c:\
不應該在那裡的空間。此外,這只會為您執行它的特定 cmd 會話設置變數,因此它僅在您從該命令提示符啟動 PostgreSQL 時才有效。這不是您通常在 Windows 上執行 PostgreSQL 的方式,您通常將其作為服務執行。因此,您必須使用 GUI 界面來“編輯系統環境變數”,而不是
set
從命令行使用。
小修正 你需要設置
set PYTHONHOME=c:\ edb\languagepack\v1\Python-3.7
並不是
PYTHON_HOME