CREATE LANGUAGE plpython3u on PostgreSQL 9.6

EDB Team Member

CREATE LANGUAGE plpython3u on PostgreSQL 9.6

Using trusted or untrusted distributions of python we can create plpython3u language in PostgreSQL. Today am trying with SCL distribution (am not recommending, I tried for testing) of python3.3 to create language plpython3u.

Let's begin creating language in a binary version of PostgreSQL 9.6 installation without any tweaking.


-bash-4.2$ psql
psql.bin (9.6.4)
Type "help" for help.
postgres=# CREATE LANGUAGE plpython3u;
ERROR: could not load library "/opt/PostgreSQL/9.6/lib/postgresql/": cannot open shared object file: No such file or directory

Hmmm, "/opt/PostgreSQL/9.6/lib/postgresql/" looking for a library "". To confirm, run "ldd" command

-bash-4.2$ cd /opt/PostgreSQL/9.6/lib/postgresql/
-bash-4.2$ ldd => (0x00007fff9db12000) => not found => /lib64/ (0x00007fe75e42f000)
/lib64/ (0x00007fe75ea27000)

Now, its clear we need libpython3.3 to create plpython3u language.

Let's get started as a root user to install python3.3 from SCL repo by enabling it.

#yum install centos-release-scl
#yum install python33

After installing, find a library "" required by


[root@tools ~]# find / -name
Cool. To make use of Python3 bundle we need to set PYTHONPATH,PYTHONHOME, PATH and LD_LIBRARY_PATH.
-bash-4.2$ export PYTHONPATH=/opt/rh/python33/root/usr
-bash-4.2$ export PYTHONHOME=/opt/rh/python33/root/usr
-bash-4.2$ export LD_LIBRARY_PATH=/opt/rh/python33/root/usr/lib64:$LD_LIBRARY_PATH
-bash-4.2$ export PATH=$PYTHONPATH:$PATH

Try running "ldd" on "/opt/PostgreSQL/9.6/lib/postgresql/" again to check the libraries are properly picked.

-bash-4.2$ cd /opt/PostgreSQL/9.6/lib/postgresql/
-bash-4.2$ ldd => (0x00007fffe26ed000) => /opt/rh/python33/root/usr/lib64/ (0x00007fd31c205000) => /lib64/ (0x00007fd31be2d000) => /lib64/ (0x00007fd31bc11000) => /lib64/ (0x00007fd31ba0d000) => /lib64/ (0x00007fd31b809000) => /lib64/ (0x00007fd31b507000)
/lib64/ (0x00007fd31c89c000)

Nice. We are all set. Let's restart the server and create the language plpython3u.

-bash-4.2$ pg_ctl restart
server starting
-bash-4.2$ psql
psql.bin (9.6.4)
Type "help" for help.
postgres=# CREATE LANGUAGE plpython3u;

Very nice... One last step, let's test plpython3u language by creating a sample function.

postgres=# CREATE OR REPLACE FUNCTION maxme (a integer, b integer) RETURNS integer AS
if a > b:
return a
return b
$$ LANGUAGE plpython3u;
postgres=# SELECT maxme(1, 2);
(1 row)




Archived Discussions

Effective March 31st, we will no longer engage on PostgresRocks.

How to engage with us further?

  • Thought Leadership: EDB Blogs

  • Tips and Tricks: Postgres Tutorials

  • Customer Support: Create a Case Please note: Only customers with an active EDB support subscription and support portal authorization can create support ticket

  • Engage on Stackoverflow While engaging on Stackoverflow tag the question with EDB or EnterpriseDB.

© 2019 EnterpriseDB Corporation. All rights reserved.   |   Privacy Policy   |  Terms of Use   |   Trademarks