简体   繁体   中英

Install PL/Python on Windows for PostgreSQL 12

I've been working on FHIR for a project and we are using PostgreSQL as a database. While reading docs, I've come to know about PL/Python and decided to give it a shot but I am unable to install the python extension.

When I run the command CREATE EXTENSION pypthon3u; I get the following error

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

I've checked this SO answer but it couldn't help.

My PostgreSQL version: PostgreSQL 12.2, compiled by Visual C++ build 1914, 64-bit

Installed Python version: 3.7.7 (64 Bit)

OS Info: Windows 10 Enterprise Version 1909 OS Build 18363.657

For me, it looks like incorrect version of Python but I'm installing python 3.7.* version against which PostgreSQL is compiled as specified in doc\installation-notes.html inside the install directory.

Any help will be appreciated.

Even if you use the EDB installer's Stack Builder to install Python, you still have to follow the instructions to "ensure they are included in the PATH variable under which the database server will be started". I had to do this at the system level, as I can't find a way to set the PATH for individual services.

And then you also need to set PYTHONPATH as well, which seems to be undocumented.

So I ended up adding c:\edb\languagepack\v1\Python-3.7 to PATH and creating PYTHONPATH with c:\edb\languagepack\v1\Python-3.7\Lib .

我必须添加包含 plpython3.dll 的目录做系统/用户变量(windows)。

I was trying the same. Though I am no expert and my errors were a bit different, here are a few things to check:

  • under share\extension\ , there should be plpython3u.control and plpython3u--1.0.sql to be able to do CREATE EXTENSION plpython3u;
  • ensure you are not having any typo in the command above.
  • under lib\ , there should be a plpython3.dll . This one is possibly created after the above step.
  • make sure lib\ is in your PATH .
  • PYTHONHOME should be set in either system/user environment, or should be set before the server start. It seems the version is not as much important as having this name set. plpython3.dll seems to look for a python39.dll but I could use it with a 3.8 installation.

I used a zipped version of Postgres, so the following is my way to run the server.

set PATH=%PATH%;d:\pgsql\bin\;d:\pgsql\lib\
set PYTHONHOME=c:\DevTools\Python\Python38
pg_ctl -D d:\pgsql\pgdata -l logfile start

PS: without PYTHONHOME , the server crashes. the server itself or psql restarts the server but I am not sure about pgAdmin .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM