Este é um dos blogs mais rápidos que estou publicando :). Estou publicando do meu terminal como é dos meus testes para criar a linguagem plpython3u.
Usando distribuições confiáveis ou não confiáveis de python, podemos criar a linguagem plpython3u no PostgreSQL. Nos meus testes, estou tentando com a distribuição SCL (não estou recomendando, tentei testar) do python3.3 para criar a linguagem plpython3u.
Vamos começar a criar a linguagem em uma versão binária da instalação do PostgreSQL 9.6 sem nenhum ajuste.
-bash-4.2$ psql
psql.bin (9.6.4)
Digite “help” para obter ajuda.
postgres=# CREATE LANGUAGE plpython3u;
ERRO:não foi possível carregar a biblioteca “/opt/PostgreSQL/9.6/lib/postgresql/plpython3.so”:libpython3.3m.so.1.0:não foi possível abrir o arquivo de objeto compartilhado:No such arquivo ou diretório
Hmmm, “/opt/PostgreSQL/9.6/lib/postgresql/plpython3.so” procurando por uma biblioteca “libpython3.3m.so.1.0”. Para confirmar, execute o comando “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 => não encontrado
libc.so.6 => /lib64/libc.so.6 (0x00007fe75e42f000)
/lib64/ld-linux-x86-64.so. 2 (0x00007fe75ea27000)
Agora, está claro que precisamos de libpython3.3m.so.1.0 para criar a linguagem plpython3u.
Vamos começar como um usuário root para instalar o python3.3 do repositório SCL, habilitando-o.
#yum instale centos-release-scl
#yum instale python33
Após a instalação, encontre uma biblioteca “libpython3.3m.so.1.0” exigida pelo plpython3.so
[root@tools ~]# find / -name libpython3.3m.so.1.0/opt/rh/python33/root/usr/lib64/libpython3.3m.so.1.0
Frio. Para fazer uso do pacote Python3 mude como um usuário postgres e defina a variável de ambiente PYTHONPATH, PYTHONHOME, PATH e 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
Tente executar “ldd” em “/opt/PostgreSQL/9.6/lib/postgresql/plpython3.so” novamente para verificar se as bibliotecas foram selecionadas corretamente.
-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)
Legal. Estamos todos prontos. Vamos reiniciar o servidor e criar a linguagem plpython3u.
-bash-4.2$ pg_ctl reinicie
servidor inicializando
-bash-4.2$ psql
psql.bin (9.6.4)
Digite “help” para obter ajuda.
postgres=# CRIAR IDIOMA plpython3u;
CRIAR IDIOMA
Muito bom… Um último passo, vamos testar a linguagem plpython3u criando uma função de exemplo.
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)
Bom. Aproveitar!!
Raghav