Detta är en av de snabbaste bloggarna jag publicerar :). Jag publicerar från min terminal som jag testar för att skapa språket plpython3u.
Genom att använda betrodda eller otillförlitliga distributioner av python kan vi skapa plpython3u-språk i PostgreSQL. I min testning försöker jag med SCL-distribution (rekommenderar inte, jag försökte testa) av python3.3 för att skapa språket plpython3u.
Låt oss börja skapa språk på en binär version av PostgreSQL 9.6-installationen utan några justeringar.
-bash-4.2$ psql
psql.bin (9.6.4)
Skriv "hjälp" för hjälp.postgres=# SKAPA SPRÅK plpython3u;
FEL:kunde inte ladda biblioteket “/opt/PostgreSQL/9.6/lib/postgresql/plpython3.so”:libpython3.3m.so.1.0:kan inte öppna fil med delat objekt:Inget sådant fil eller katalog
Hmmm, "/opt/PostgreSQL/9.6/lib/postgresql/plpython3.so" letar efter ett bibliotek "libpython3.3m.so.1.0". För att bekräfta, kör kommandot "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 => hittades inte
libc.so.6 => /lib64/libc.so.6 (0x00007fe75e42f000)
/lib64/ld-linux-x86-64.so. 2 (0x00007fe75ea27000)
Nu är det klart att vi behöver libpython3.3m.so.1.0 för att skapa plpython3u-språk.
Låt oss komma igång som rootanvändare för att installera python3.3 från SCL repo genom att aktivera det.
#yum installera centos-release-scl
#yum installera python33
Efter installationen, hitta ett bibliotek "libpython3.3m.so.1.0" som krävs av plpython3.so
[root@tools ~]# hitta / -namn libpython3.3m.so.1.0/opt/rh/python33/root/usr/lib64/libpython3.3m.so.1.0
Häftigt. För att använda Python3-paketet byt som postgres-användare och ställ in miljövariabeln PYTHONPATH, PYTHONHOME, PATH och 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
Försök att köra "ldd" på "/opt/PostgreSQL/9.6/lib/postgresql/plpython3.so" igen för att kontrollera att biblioteken är korrekt valda.
-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.00000 />libutil.so.1 => /lib64/libutil.so.1 (0x00007fd31b809000)
libm.so.6 => /lib64/libm.so.6 (0x00007fd31b507000)
/lib64/ld -linux-x86-64.so.2 (0x00007fd31c89c000)
Trevlig. Vi är redo. Låt oss starta om servern och skapa språket plpython3u.
-bash-4.2$ pg_ctl omstart
server startar
-bash-4.2$ psql
psql.bin (9.6.4)
Skriv "hjälp" för hjälp.
postgres=# SKAPA SPRÅK plpython3u;
SKAPA SPRÅK
Mycket trevligt... Ett sista steg, låter testa plpython3u-språket genom att skapa en exempelfunktion.
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)
Bra. Njut!!
Raghav