To jeden z najszybszych blogów, jakie publikuję :). Publikuję z mojego terminala, tak jak w przypadku moich testów, aby utworzyć język plpython3u.
Korzystając z zaufanych lub niezaufanych dystrybucji Pythona, możemy stworzyć język plpython3u w PostgreSQL. W moich testach próbuję z dystrybucją SCL (nie polecam, próbowałem do testowania) python3.3, aby stworzyć język plpython3u.
Zacznijmy tworzyć język na binarnej wersji instalacji PostgreSQL 9.6 bez żadnych poprawek.
-bash-4.2$ psql
psql.bin (9.6.4)
Wpisz „pomoc”, aby uzyskać pomoc.
postgres=# CREATE LANGUAGE plpython3u;
BŁĄD:nie można załadować biblioteki „/opt/PostgreSQL/9.6/lib/postgresql/plpython3.so”:libpython3.3m.so.1.0:nie można otworzyć udostępnionego pliku obiektu:Brak takiego plik lub katalog
Hmmm, „/opt/PostgreSQL/9.6/lib/postgresql/plpython3.so” szukam biblioteki „libpython3.3m.so.1.0”. Aby potwierdzić, uruchom polecenie „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 => nie znaleziono
libc.so.6 => /lib64/libc.so.6 (0x00007fe75e42f000)
/lib64/ld-linux-x86-64.so. 2 (0x00007fe75ea27000)
Teraz jasne jest, że potrzebujemy libpython3.3m.so.1.0 do stworzenia języka plpython3u.
Zacznijmy jako użytkownik root, aby zainstalować python3.3 z repozytorium SCL, włączając go.
#yum zainstaluj centos-release-scl
#yum zainstaluj python33
Po zainstalowaniu znajdź bibliotekę „libpython3.3m.so.1.0” wymaganą przez plpython3.so
[root@tools ~]# znajdź / -name libpython3.3m.so.1.0/opt/rh/python33/root/usr/lib64/libpython3.3m.so.1.0
Fajny. Aby użyć pakietu Python3, przełącz się jako użytkownik postgres i ustaw zmienną środowiskową PYTHONPATH, PYTHONHOME, PATH i LD_LIBRARY_PATH.
-bash-4.2$ eksportuj PYTHONPATH=/opt/rh/python33/root/usr
-bash-4.2$ eksportuj PYTHONHOME=/opt/rh/python33/root/usr
-bash-4.2$ eksportuj LD_LIBRARY_PATH=/opt/rh/python33/root/usr/lib64:$LD_LIBRARY_PATH
-bash-4.2$ export PATH=$PYTHONPATH:$PATH
Spróbuj ponownie uruchomić „ldd” na „/opt/PostgreSQL/9.6/lib/postgresql/plpython3.so”, aby sprawdzić, czy biblioteki zostały prawidłowo wybrane.
-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)
Ładny. Jesteśmy gotowi. Zrestartujmy serwer i stwórzmy język plpython3u.
-bash-4.2$ restart pg_ctl
Uruchamianie serwera
-bash-4.2$ psql
psql.bin (9.6.4)
Wpisz „help”, aby uzyskać pomoc.
postgres=# UTWÓRZ JĘZYK plpython3u;
UTWÓRZ JĘZYK
Bardzo fajnie… Ostatni krok, przetestujmy język plpython3u, tworząc przykładową funkcję.
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)
Dobry. Miłej zabawy!!
Ragawa