How to change Python version used by postgresql92-plpython on CentOS
This is step by step how to change Python version if you install postgresql-server using pgdg-92-centos repo
Check your current plpython2.so dependencies
[root@localhost lib]# ldd plpython2.so linux-gate.so.1 => (0x00526000) libpython2.6.so.1.0 => /usr/lib/libpython2.6.so.1.0 (0x00e5a000) libc.so.6 => /lib/libc.so.6 (0x0017f000) libpthread.so.0 => /lib/libpthread.so.0 (0x00316000) libdl.so.2 => /lib/libdl.so.2 (0x005a5000) libutil.so.1 => /lib/libutil.so.1 (0x00b8b000) libm.so.6 => /lib/libm.so.6 (0x00c67000) /lib/ld-linux.so.2 (0x0075e000)
Install virtualenv to your Python target (i.e /usr/local/bin/python2.7)
# cd virtualenv-1.9.1
# python2.7 setup.py install
Create new virtualenv
# cd /opt/virtenv # virtualenv pgsql
Activate our new virtualenv
# source /opt/virtenv/pgsql/bin/activate
Download postgresql source (same with your postgresql installation version)
http://www.postgresql.org/ftp/source/
Confiure and Compile postgresql source
# cd /usr/local/src/postgresql-9.2.4
# ./configure --with-python PYTHON=/opt/virtenv/pgsql/bin/python
# make
Replace old plpython2.so
# cd /usr/pgsql-9.2/lib
# mv plpython2.so plpython26.so
# cp /usr/local/src/postgresql-9.2.4/src/pl/plpython/plpython2.so /usr/pgsql-9.2/lib/plpython2.so
Check your new plpython2.so
(pgsql)[root@localhost lib]# ldd /usr/pgsql-9.2/lib/plpython2.so linux-gate.so.1 => (0x009de000) libpthread.so.0 => /lib/libpthread.so.0 (0x006e7000) libdl.so.2 => /lib/libdl.so.2 (0x009cf000) libutil.so.1 => /lib/libutil.so.1 (0x007c5000) libm.so.6 => /lib/libm.so.6 (0x00431000) libc.so.6 => /lib/libc.so.6 (0x00532000) /lib/ld-linux.so.2 (0x00512000)
Restart Postgresql server
# service postgresql-9.2 restart
Create procedure for testing
-- Function: print_python_version() -- DROP FUNCTION print_python_version(); CREATE OR REPLACE FUNCTION print_python_version() RETURNS text AS $BODY$ import platform return platform.python_version() $BODY$ LANGUAGE plpythonu VOLATILE COST 100; ALTER FUNCTION print_python_version() OWNER TO postgres;
Run our new procedure
select print_python_version(); 2.7.3
















