C'est l'un des blogs les plus rapides que je publie :). Je publie depuis mon terminal tel quel mes tests pour créer le langage plpython3u.
En utilisant des distributions de confiance ou non de python, nous pouvons créer le langage plpython3u dans PostgreSQL. Lors de mes tests, j'essaie avec la distribution SCL (je ne recommande pas, j'ai essayé pour les tests) de python3.3 de créer le langage plpython3u.
Commençons à créer un langage sur une version binaire de l'installation de PostgreSQL 9.6 sans aucun ajustement.
-bash-4.2$ psql
psql.bin (9.6.4)
Tapez "help" pour obtenir de l'aide.postgres=# CREATE LANGUAGE plpython3u;
ERREUR :impossible de charger la bibliothèque « /opt/PostgreSQL/9.6/lib/postgresql/plpython3.so » :libpython3.3m.so.1.0 :impossible d'ouvrir le fichier objet partagé :aucun fichier ou répertoire
Hmmm, "/opt/PostgreSQL/9.6/lib/postgresql/plpython3.so" à la recherche d'une bibliothèque "libpython3.3m.so.1.0". Pour confirmer, exécutez la commande "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 => introuvable
libc.so.6 => /lib64/libc.so.6 (0x00007fe75e42f000)
/lib64/ld-linux-x86-64.so. 2 (0x00007fe75ea27000)
Maintenant, il est clair que nous avons besoin de libpython3.3m.so.1.0 pour créer le langage plpython3u.
Commençons en tant qu'utilisateur root pour installer python3.3 à partir du référentiel SCL en l'activant.
#yum install centos-release-scl
#yum install python33
Après l'installation, recherchez une bibliothèque "libpython3.3m.so.1.0" requise par plpython3.so
[root@tools ~]# find / -name libpython3.3m.so.1.0/opt/rh/python33/root/usr/lib64/libpython3.3m.so.1.0
Frais. Pour utiliser le bundle Python3, basculez en tant qu'utilisateur postgres et définissez la variable d'environnement PYTHONPATH, PYTHONHOME, PATH et 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
Essayez à nouveau d'exécuter "ldd" sur "/opt/PostgreSQL/9.6/lib/postgresql/plpython3.so" pour vérifier que les bibliothèques sont correctement choisies.
-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)
Joli. Nous sommes prêts. Redémarrons le serveur et créons le langage plpython3u.
-bash-4.2$ pg_ctl restart
démarrage du serveur
-bash-4.2$ psql
psql.bin (9.6.4)
Tapez « help » pour obtenir de l'aide.
postgres=# CREER LANGUE plpython3u;
CREER LANGUE
Très bien… Une dernière étape, testons le langage plpython3u en créant un exemple de fonction.
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)
Bon. Amusez-vous !
Raghav