sql >> Database >  >> RDS >> PostgreSQL

TAAL MAKEN plpython3u – PostgreSQL 9.6

Dit is een van de snelste blogs die ik publiceer :). Ik publiceer vanaf mijn terminal zoals ik test om taal plpython3u te maken.

Met behulp van vertrouwde of niet-vertrouwde distributies van python kunnen we plpython3u-taal maken in PostgreSQL. Bij mijn testen probeer ik met SCL-distributie (ik raad het niet aan, ik heb het geprobeerd) van python3.3 om taal plpython3u te maken.

Laten we beginnen met het maken van taal op een binaire versie van PostgreSQL 9.6-installatie zonder enige aanpassingen.

-bash-4.2$ psql
psql.bin (9.6.4)
Typ "help" voor hulp.

postgres=# TAAL MAKEN plpython3u;
FOUT:kan bibliotheek "/opt/PostgreSQL/9.6/lib/postgresql/plpython3.so" niet laden:libpython3.3m.so.1.0:kan het gedeelde objectbestand niet openen:niet zo bestand of map

Hmmm, "/opt/PostgreSQL/9.6/lib/postgresql/plpython3.so" op zoek naar een bibliotheek "libpython3.3m.so.1.0". Voer de opdracht "ldd" uit om te bevestigen

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

Nu is het duidelijk dat we libpython3.3m.so.1.0 nodig hebben om plpython3u-taal te maken.

Laten we als rootgebruiker aan de slag gaan om python3.3 vanuit SCL repo te installeren door het in te schakelen.

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

Zoek na de installatie naar een bibliotheek "libpython3.3m.so.1.0" vereist door plpython3.so

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

Stoer. Om als postgres-gebruiker gebruik te maken van Python3-bundel-switch en de omgevingsvariabele PYTHONPATH, PYTHONHOME, PATH en LD_LIBRARY_PATH in te stellen.

-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

Probeer "ldd" opnieuw uit te voeren op "/opt/PostgreSQL/9.6/lib/postgresql/plpython3.so" om te controleren of de bibliotheken correct zijn gekozen.

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

Leuk. We zijn er allemaal klaar voor. Laten we de server opnieuw opstarten en de taal plpython3u maken.

-bash-4.2$ pg_ctl restart
server start

-bash-4.2$ psql
psql.bin (9.6.4)
Typ "help" voor hulp.

postgres=# TAAL MAKEN plpython3u;
TAAL MAKEN

Heel leuk... Een laatste stap, laten we de plpython3u-taal testen door een voorbeeldfunctie te maken.

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)

Goed. Geniet ervan!!

Raghav


  1. Bereken volgende primaire sleutel - van specifiek formaat

  2. Oracle DBA-mentor

  3. Nieuwe Azure SQL Database standaard tierformaten

  4. MySQL:ongeldig gebruik van groepsfunctie