PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

CREA LINGUA plpython3u – PostgreSQL 9.6

Questo è uno dei blog più veloci che sto pubblicando :). Sto pubblicando dal mio terminale così come i miei test per creare il linguaggio plpython3u.

Usando distribuzioni affidabili o non affidabili di python possiamo creare il linguaggio plpython3u in PostgreSQL. Nei miei test, sto provando con la distribuzione SCL (non lo sto consigliando, ho provato per il test) di python3.3 per creare il linguaggio plpython3u.

Iniziamo a creare il linguaggio su una versione binaria dell'installazione di PostgreSQL 9.6 senza alcuna modifica.

-bash-4.2$ psql
psql.bin (9.6.4)
Digita "help" per ricevere assistenza.

postgres=# CREATE LANGUAGE plpython3u;
ERRORE:impossibile caricare la libreria “/opt/PostgreSQL/9.6/lib/postgresql/plpython3.so”:libpython3.3m.so.1.0:impossibile aprire il file oggetto condiviso:No such file o directory

Hmmm, "/opt/PostgreSQL/9.6/lib/postgresql/plpython3.so" alla ricerca di una libreria "libpython3.3m.so.1.0". Per confermare, esegui il 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 => non trovato
libc.so.6 => /lib64/libc.so.6 (0x00007fe75e42f000)
/lib64/ld-linux-x86-64.so. 2 (0x00007fe75ea27000)

Ora, è chiaro che abbiamo bisogno di libpython3.3m.so.1.0 per creare il linguaggio plpython3u.

Iniziamo come utente root per installare python3.3 dal repository SCL abilitandolo.

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

Dopo l'installazione, trova una libreria "libpython3.3m.so.1.0" richiesta da plpython3.so

[root@tools ~]# trova / -name libpython3.3m.so.1.0/opt/rh/python33/root/usr/lib64/libpython3.3m.so.1.0

Freddo. Per utilizzare il bundle Python3, passa come utente postgres e imposta la variabile d'ambiente PYTHONPATH, PYTHONHOME, PATH e 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

Prova a eseguire nuovamente "ldd" su "/opt/PostgreSQL/9.6/lib/postgresql/plpython3.so" per verificare che le librerie siano state selezionate correttamente.

-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)

Bello. Siamo tutti a posto. Riavviamo il server e creiamo la lingua plpython3u.

-bash-4.2$ pg_ctl restart
avvio del server

-bash-4.2$ psql
psql.bin (9.6.4)
Digita "help" per ricevere assistenza.

postgres=# CREA LINGUA plpython3u;
CREA LINGUA

Molto bello... Un ultimo passaggio, testiamo il linguaggio plpython3u creando una funzione di esempio.

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)

Bene. Divertiti!!

Raghav