Това е един от най-бързите блогове, които публикувам :). Публикувам от моя терминал, както е моето тестване за създаване на език plpython3u.
Използвайки доверени или ненадеждни дистрибуции на python, можем да създадем език plpython3u в PostgreSQL. При моето тестване се опитвам с SCL дистрибуция (не препоръчвам, опитах за тестване) на python3.3 да създам език plpython3u.
Нека започнем да създаваме език на двоична версия на инсталацията на PostgreSQL 9.6 без никакво настройване.
-bash-4.2$ psql
psql.bin (9.6.4)
Въведете „help“ за помощ.postgres=# СЪЗДАВАНЕ НА ЕЗИК plpython3u;
ГРЕШКА:не можа да се зареди библиотеката “/opt/PostgreSQL/9.6/lib/postgresql/plpython3.so”:libpython3.3m.so.1.0:не може да се отвори споделен обектен файл:Няма такъв файл или директория
Хммм, „/opt/PostgreSQL/9.6/lib/postgresql/plpython3.so“ търси библиотека „libpython3.3m.so.1.0“. За да потвърдите, изпълнете командата “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 => не е намерен
libc.so.6 => /lib64/libc.so.6 (0x00007fe75e42f000)
/lib64/ld-linux-x86-64.so. 2 (0x00007fe75ea27000)
Сега е ясно, че имаме нужда от libpython3.3m.so.1.0, за да създадем език plpython3u.
Нека започнем като root потребител, за да инсталираме python3.3 от SCL репо, като го активираме.
#yum инсталирай centos-release-scl
#yum инсталирай python33
След инсталирането намерете библиотека „libpython3.3m.so.1.0“, изисквана от plpython3.so
[root@tools ~]# find / -name libpython3.3m.so.1.0/opt/rh/python33/root/usr/lib64/libpython3.3m.so.1.0
Готино. За да използвате превключвателя на пакета Python3 като потребител на postgres и задайте променливата на средата PYTHONPATH, PYTHONHOME, PATH и 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$ експорт LD_LIBRARY_PATH=/opt/rh/python33/root/usr/lib64:$LD_LIBRARY_PATH
-bash-4.2$ export PATH=$PYTHONPATH:$PATH
Опитайте отново да стартирате „ldd“ на „/opt/PostgreSQL/9.6/lib/postgresql/plpython3.so“, за да проверите дали библиотеките са правилно избрани.
-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/libli 6 (0x00007fd31be2d000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fd31bc11000)
libdl.so.2 => /lib64/libdl0000000000000000000 />libutil.so.1 => /lib64/libutil.so.1 (0x00007fd31b809000)
libm.so.6 => /lib64/libm.so.6 (0x00007fd31b507000)
/lib -linux-x86-64.so.2 (0x00007fd31c89c000)
Хубаво. Ние сме готови. Нека рестартираме сървъра и да създадем езика plpython3u.
-bash-4.2$ pg_ctl restart
сървърът стартира
-bash-4.2$ psql
psql.bin (9.6.4)
Въведете „help“ за помощ.
postgres=# СЪЗДАВАНЕ НА ЕЗИК plpython3u;
СЪЗДАВАНЕ НА ЕЗИК
Много хубаво... Една последна стъпка, позволява да тестваме езика plpython3u, като създадем примерна функция.
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)
Добре. Насладете се!!
Рагхав