Dette er en af de hurtigste blogs jeg udgiver :). Jeg udgiver fra min terminal, som det er min test for at skabe sprog plpython3u.
Ved at bruge betroede eller upålidelige distributioner af python kan vi oprette plpython3u-sprog i PostgreSQL. I min test prøver jeg med SCL-distribution (kan ikke anbefale, jeg prøvede at teste) af python3.3 for at skabe sprog plpython3u.
Lad os begynde at skabe sprog på en binær version af PostgreSQL 9.6-installationen uden nogen justeringer.
-bash-4.2$ psql
psql.bin (9.6.4)
Skriv "hjælp" for at få hjælp.
postgres=# OPRET SPROG plpython3u;
FEJL:kunne ikke indlæse biblioteket “/opt/PostgreSQL/9.6/lib/postgresql/plpython3.so”:libpython3.3m.so.1.0:kan ikke åbne delt objektfil:Ingen sådan fil eller mappe
Hmmm, "/opt/PostgreSQL/9.6/lib/postgresql/plpython3.so" leder efter et bibliotek "libpython3.3m.so.1.0". For at bekræfte, kør kommandoen "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 => ikke fundet
libc.so.6 => /lib64/libc.so.6 (0x00007fe75e42f000)
/lib64/ld-linux-x86-64.so. 2 (0x00007fe75ea27000)
Nu er det klart, at vi har brug for libpython3.3m.so.1.0 for at skabe plpython3u sprog.
Lad os komme i gang som root-bruger for at installere python3.3 fra SCL repo ved at aktivere det.
#yum installer centos-release-scl
#yum installer python33
Efter installationen skal du finde et bibliotek "libpython3.3m.so.1.0", der kræves af plpython3.so
[root@tools ~]# find / -navn libpython3.3m.so.1.0/opt/rh/python33/root/usr/lib64/libpython3.3m.so.1.0
Fedt nok. For at gøre brug af Python3 bundle skift som en postgres-bruger og indstil miljøvariablen PYTHONPATH, PYTHONHOME, PATH og LD_LIBRARY_PATH.
-bash-4.2$ eksport PYTHONPATH=/opt/rh/python33/root/usr
-bash-4.2$ eksport PYTHONHOME=/opt/rh/python33/root/usr
-bash-4.2$ eksport LD_LIBRARY_PATH=/opt/rh/python33/root/usr/lib64:$LD_LIBRARY_PATH
-bash-4.2$ eksport PATH=$PYTHONPATH:$PATH
Prøv at køre "ldd" på "/opt/PostgreSQL/9.6/lib/postgresql/plpython3.so" igen for at kontrollere, at bibliotekerne er korrekt valgt.
-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.0000 (0x0001ba)<7f0001 />libutil.so.1 => /lib64/libutil.so.1 (0x00007fd31b809000)
libm.so.6 => /lib64/libm.so.6 (0x00007fd31b507000)
/lib64/ld -linux-x86-64.so.2 (0x00007fd31c89c000)
Pæn. Vi er alle klar. Lad os genstarte serveren og oprette sproget plpython3u.
-bash-4.2$ pg_ctl genstart
server starter
-bash-4.2$ psql
psql.bin (9.6.4)
Skriv "hjælp" for at få hjælp.
postgres=# OPRET SPROG plpython3u;
OPRET SPROG
Meget flot... Et sidste trin, lader teste plpython3u sprog ved at oprette en eksempelfunktion.
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)
Godt. God fornøjelse!!
Raghav