Estoy tratando de usar el lenguaje python en postgresql. Algo como esto:
create or replace function test(_a integer) returns integer as $$ if _a%2==0: return 'even' elif _a%3==0: return 'mult of 3' else: return _a $$ language plpython3uPero cuando ejecuto esto, me sale este error:
ERROR: language "plpython3u" does not exist HINT: Use CREATE EXTENSION to load the language into the database. SQL state: 42704Luego, traté de crear la extensión del lenguaje python ejecutando:
create extension plpython3uLo cual me dice el siguiente error:
ERROR: could not load library "C:/Program Files/PostgreSQL/12/lib/plpython3.dll": The specified module could not be found. SQL state: 58P01 Verifiqué si el archivo plpython3.dll está allí. Luego leí algo sobre cómo modificar el archivo de configure de postgresql compilando postgres desde el código fuente y agregando --with python (encontré algo de esto aquí ).
Mi problema es que no sé cómo hacer esto realmente. Mi sistema operativo es Windows Server 2019 de 64 bits, la versión de Python es 3.7.4 y la versión de Postgresql es 12.2-1 (pgadmin 4.18).
¿Como puedo resolver esto?
Hacer que python funcione con postgres parece depender de la versión o versiones. Actualmente tengo postgres 9.6. y había instalado python 3.9. Anteriormente había instalado la extensión plpython3u en postgres pero había pasado el tiempo y me mudé a otra computadora. Cuando traté de ejecutar un procedimiento basado en Python, recibí un error. Descargué Dependency Walker, desde aquí: https://www.opcsupport.com/s/article/How-do-I-figure-out-why-my-DLL-is-failing-Microsoft-Dependency-Walker o aquí: https://www.dependencywalker.com/ . Cuando abrí el caminante de dependencias, arrastré plpython3.dll al caminante de dependencias, el .dll se encuentra aquí: F:\pg96\lib. Luego obtuve la siguiente pantalla, a continuación, que parecía indicar que necesitaba instalar Python 3.7. Descargué Python 3.7 desde aquí: https://www.python.org/downloads/windows/ . Y mis procedimientos de python ahora funcionaron.
No es necesario compilar desde la fuente, lo que requeriría que instale un compilador C, que no es trivial en Windows.
Nunca nos dijo si python3.dll estaba presente en el directorio o no, así que asumiré que estaba allí. Entonces, el error indicaría que falta una biblioteca compartida con la que se vincula python3.dll , muy probablemente de Python 3. La instalación de Python 3 probablemente resolverá el problema.