3

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.

6
  • unfortunately, I installed it 1 or two months ago so I'm not sure but I have this file (postgresql-12.2-1-windows-x64.exe) used to install DB. Commented Mar 14, 2020 at 15:34
  • PL/Python is not installed. You have to install the binaries before you can create the extension. Commented Mar 14, 2020 at 16:00
  • Can you please guide me on how to install binaries? Commented Mar 14, 2020 at 16:12
  • @LaurenzAlbe Is this is what you are talking about? Commented Mar 14, 2020 at 16:30
  • That looks like the EDB installer. If you use that, and have it launch Stack Builder, and have that install the language pack, it should install its own python. Is that what you did, or did you install python from elsewhere? Commented Mar 14, 2020 at 18:03

4 Answers 4

3

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.

Sign up to request clarification or add additional context in comments.

6 Comments

I didn't use the EDB installer. As per your recommendation, I've added PYTHONPATH to the path and as user variable but still getting the same error.
PYTHONPATH and PATH are two separate variables, you don't set one to the other, you set them separately. In my hands, setting just PATH was enough to allow the extension to be created, but then it didn't work correctly until PYTHONPATH was set.
Yeah, I know both are different. I added python to the path, but it didn't work. Remember, I'm not using EDB and installed python from their official site.
then I added PythonPath but no luck.
I've reinstalled PostgreSQL and installed python using EDB language pack. c:\edb\languagepack\v1\Python-3.7 to PATH and added PYTHONPATH with c:\edb\languagepack\v1\Python-3.7\Lib but still getting the same error.
|
1

I had to add directory containing plpython3.dll do system/user variables (windows).

Comments

1

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.

Comments

0

I had the same error message "could not load library "C:/Program Files/PostgreSQL/14/lib/plpython3.dll": The specified module could not be found"

Postgres 14.8 on Windows 10, Python 3.12.

Used 'Dependencies' app (replacement for DependencyWalker) opened plpython3.dll and it shows that python39.dll is missing. Went to Python312 folder and copied (copy/b) python312.dll as python39.dll.

After that extension was created successfully.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.