Este es uno de los blogs más rápidos que estoy publicando :). Estoy publicando desde mi terminal al igual que mis pruebas para crear el lenguaje plpython3u.
Usando distribuciones confiables o no confiables de python, podemos crear el lenguaje plpython3u en PostgreSQL. En mis pruebas, estoy intentando con la distribución SCL (no estoy recomendando, probé para probar) de python3.3 para crear el lenguaje plpython3u.
Comencemos a crear un lenguaje en una versión binaria de la instalación de PostgreSQL 9.6 sin ningún ajuste.
-bash-4.2$ psql
psql.bin (9.6.4)
Escriba "ayuda" para obtener ayuda.
postgres=# CREAR IDIOMA plpython3u;
ERROR:no se pudo cargar la biblioteca “/opt/PostgreSQL/9.6/lib/postgresql/plpython3.so”:libpython3.3m.so.1.0:no se puede abrir el archivo de objeto compartido:no existe tal archivo o directorio
Hmmm, "/opt/PostgreSQL/9.6/lib/postgresql/plpython3.so" buscando una biblioteca "libpython3.3m.so.1.0". Para confirmar, ejecute el comando "ldd"
-bash-4.2$ cd /opt/PostgreSQL/9.6/lib/postgresql/
-bash-4.2$ ldd plpython3.so
linux-vdso.so.1 => (0x00007fff9db12000)
libpython3.3m.so.1.0 => no encontrado
libc.so.6 => /lib64/libc.so.6 (0x00007fe75e42f000)
/lib64/ld-linux-x86-64.so. 2 (0x00007fe75ea27000)
Ahora, está claro que necesitamos libpython3.3m.so.1.0 para crear el lenguaje plpython3u.
Comencemos como usuario root para instalar python3.3 desde el repositorio de SCL habilitándolo.
#yum install centos-release-scl
#yum install python33
Después de la instalación, busque una biblioteca "libpython3.3m.so.1.0" requerida por plpython3.so
[root@tools ~]# find / -name libpython3.3m.so.1.0/opt/rh/python33/root/usr/lib64/libpython3.3m.so.1.0
Frio. Para utilizar el cambio de paquete de Python3 como usuario de postgres y establecer la variable de entorno PYTHONPATH, PYTHONHOME, PATH y LD_LIBRARY_PATH.
-bash-4.2$ exportar PYTHONPATH=/opt/rh/python33/root/usr
-bash-4.2$ exportar PYTHONHOME=/opt/rh/python33/root/usr
-bash-4.2$ exportar LD_LIBRARY_PATH=/opt/rh/python33/root/usr/lib64:$LD_LIBRARY_PATH
-bash-4.2$ export PATH=$PYTHONPATH:$PATH
Intente ejecutar "ldd" en "/opt/PostgreSQL/9.6/lib/postgresql/plpython3.so" nuevamente para verificar que las bibliotecas se eligieron correctamente.
-bash-4.2$ cd /opt/PostgreSQL/9.6/lib/postgresql/
-bash-4.2$ ldd plpython3.so
linux-vdso.so.1 => (0x00007fffe26ed000)
libpython3.3m.so.1.0 => /opt/rh/python33/root/usr/lib64/libpython3.3m.so.1.0 (0x00007fd31c205000)
libc.so.6 => /lib64/libc.so. 6 (0x00007fd31be2d000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fd31bc11000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fd31ba0d000)
libutil.so.1 => /lib64/libutil.so.1 (0x00007fd31b809000)
libm.so.6 => /lib64/libm.so.6 (0x00007fd31b507000)
/lib64/ld -linux-x86-64.so.2 (0x00007fd31c89c000)
Lindo. Estamos listos. Reiniciemos el servidor y creemos el lenguaje plpython3u.
-bash-4.2$ pg_ctl restart
servidor iniciando
-bash-4.2$ psql
psql.bin (9.6.4)
Escriba "ayuda" para obtener ayuda.
postgres=# CREAR IDIOMA plpython3u;
CREAR IDIOMA
Muy bien... Un último paso, probemos el lenguaje plpython3u creando una función de muestra.
postgres=# CREATE OR REPLACE FUNCTION maxme (a integer, b integer) RETURNS integer AS
$$
if a > b:
return a
else
return b
$$ LANGUAGE plpython3u;
CREATE FUNCTION
postgres=# SELECT maxme(1, 2);
memax
-------
2
(1 row)
Bien. Disfruta!!
Raghav