terça-feira, 1 de outubro de 2019

Habilitar o Python no PostgreSQL


  • Cenário

Windows 10
PostgreSQL 9.5 (instalado em C:\Program Files\PostgreSQL\9.5)
Python 3.7.4 - Windows x86-64 executable installer (python-3.7.4-amd64.exe - instalado em C:\Python\Python37)

  • Problema 1

Ao executar o comando:

create extension plpython3u;

Ocorre o erro:

ERROR:  could not load library "C:/Program Files/PostgreSQL/9.5/lib/plpython3.dll": unknown error 126

Solução: copiar a dll C:\Python\Python37\python37.dll para C:\Windows\System32\python33.dll (nome modificado de python37 para python33, tem que fazer isso)

  • Problema 2

Ao criar a função de teste:

CREATE OR REPLACE FUNCTION public.fc_py()
RETURNS character varying AS
$$

return 'Hello, World!!'

$$
LANGUAGE plpython3u;

Ocorre o erro no pgAdmin:

Connection to database *** lost.
Do you want to attempt to reconnect to the database?

Conforme o log do PostgreSQL (C:\Program Files\PostgreSQL\9.5\data\pg_log) ocorre o erro:

Fatal Python error: initfsencoding: unable to load the file system codec
ModuleNotFoundError: No module named 'encodings'

Solução: criar variáveis de ambiente:

PYTHONHOME=C:\Python\Python37
PYTHONPATH=C:\Python\Python37

Se necessário adicionar C:\Python\Python37 na variável de ambiente Path também.

  • Observação

Após os procedimentos parar o serviço do PostgreSQL e iniciar novamente.

  • Referências
Os links que me ajudaram a entender/resolver os problemas:

https://www.postgresql.org/message-id/CAAQFaF%2BtU04KR-%2B8O3ksEcS8GxibUYGJSjRgfDPXE%2B6P5iqGRg%40mail.gmail.com

https://stackoverflow.com/questions/47907232/could-not-load-library-plpython3-dll

https://www.enterprisedb.com/edb-docs/d/edb-postgres-advanced-server/installation-getting-started/installation-guide/9.5/EDB_Postgres_Advanced_Server_Installation_Guide.1.59.html
https://www.enterprisedb.com/edb-docs/d/edb-postgres-advanced-server/installation-getting-started/installation-guide/9.5/EDB_Postgres_Advanced_Server_Installation_Guide.1.49.html#

https://bugs.python.org/issue11288

5 comentários:

  1. Melhor blog de desenvolvimento do brasil

    ResponderExcluir
  2. Mas e quando a variável de sistema PYTHONHOME resolve o problema mas bagunça o teu pycharm?

    ResponderExcluir
  3. Boa tarde,
    tenho instalado Python39
    Ocorre o mesmo erro
    create extension plpython3u;
    ERROR: could not load library "C:/Program Files/PostgreSQL/13/lib/plpython3.dll": unknown error 126
    Executo o mesmo procedimento acima.
    Porem o erro continua.
    Meu ajudem
    Joni

    ResponderExcluir
    Respostas
    1. Bom dia,
      Se vc instalou o PostgreSQL pelo Enterprise DB (EDB), sugiro que vc faça a instalação do Python utilizando o Stack Builder para utilizar a versão "correta" para qual a extensão foi feita conforme o imagem do link abaixo:

      https://drive.google.com/file/d/1F5XBc8JIIZZ24qX10JNUP3rGf8Yrf-5f/view?usp=sharing

      Excluir
  4. Este comentário foi removido por um administrador do blog.

    ResponderExcluir