PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

SPRACHE ERSTELLEN plpython3u – PostgreSQL 9.6

Dies ist einer der schnellsten Blogs, die ich veröffentliche :). Ich veröffentliche von meinem Terminal aus, wie es mein Test ist, um die Sprache plpython3u zu erstellen.

Mit vertrauenswürdigen oder nicht vertrauenswürdigen Distributionen von Python können wir die Sprache plpython3u in PostgreSQL erstellen. In meinen Tests versuche ich mit der SCL-Distribution (ich empfehle es nicht, ich habe es zum Testen versucht) von python3.3, um die Sprache plpython3u zu erstellen.

Beginnen wir mit der Erstellung der Sprache auf einer binären Version der PostgreSQL 9.6-Installation ohne jegliche Anpassungen.

-bash-4.2$ psql
psql.bin (9.6.4)
Geben Sie „help“ ein, um Hilfe zu erhalten.

postgres=# CREATE LANGUAGE plpython3u;
FEHLER:Bibliothek „/opt/PostgreSQL/9.6/lib/postgresql/plpython3.so“ konnte nicht geladen werden:libpython3.3m.so.1.0:Shared-Object-Datei kann nicht geöffnet werden:No such Datei oder Verzeichnis

Hmmm, „/opt/PostgreSQL/9.6/lib/postgresql/plpython3.so“ sucht nach einer Bibliothek „libpython3.3m.so.1.0“. Führen Sie zur Bestätigung den Befehl „ldd“

aus

-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 => nicht gefunden
libc.so.6 => /lib64/libc.so.6 (0x00007fe75e42f000)
/lib64/ld-linux-x86-64.so. 2 (0x00007fe75ea27000)

Jetzt ist klar, dass wir libpython3.3m.so.1.0 brauchen, um die plpython3u-Sprache zu erstellen.

Beginnen wir als Root-Benutzer mit der Installation von Python3.3 aus dem SCL-Repo, indem wir es aktivieren.

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

Suchen Sie nach der Installation nach einer Bibliothek „libpython3.3m.so.1.0“, die von plpython3.so benötigt wird

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

Cool. Um das Python3-Bundle zu verwenden, wechseln Sie als Postgres-Benutzer und setzen Sie die Umgebungsvariablen PYTHONPATH, PYTHONHOME, PATH und LD_LIBRARY_PATH.

-bash-4.2$ PYTHONPATH exportieren=/opt/rh/python33/root/usr
-bash-4.2$ PYTHONHOME exportieren=/opt/rh/python33/root/usr
-bash-4.2$ exportieren LD_LIBRARY_PATH=/opt/rh/python33/root/usr/lib64:$LD_LIBRARY_PATH
-bash-4.2$ export PATH=$PYTHONPATH:$PATH

Versuchen Sie erneut, „ldd“ auf „/opt/PostgreSQL/9.6/lib/postgresql/plpython3.so“ auszuführen, um zu überprüfen, ob die Bibliotheken richtig ausgewählt wurden.

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

Hübsch. Wir sind alle da. Lassen Sie uns den Server neu starten und die Sprache plpython3u erstellen.

-bash-4.2$ pg_ctl restart
Server wird gestartet

-bash-4.2$ psql
psql.bin (9.6.4)
Geben Sie „help“ ein, um Hilfe zu erhalten.

postgres=# SPRACHE ERSTELLEN plpython3u;
SPRACHE ERSTELLEN

Sehr schön… Als letzten Schritt testen wir die plpython3u-Sprache, indem wir eine Beispielfunktion erstellen.

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)

Gut. Viel Spaß!!

Raghav