2011-11-07 21 views
13

Necesito importar un módulo de terceros dentro de mi función pl/python. Parece que pl/python usa una python interna que no tiene ningún módulo de terceros.¿Cómo instalar un módulo de terceros para postgres pl/python?

puedo obtener este tipo de error:

ERROR: PL/Python: PL/Python function "to_tsvector_luc" failed 
DETAIL: <type 'exceptions.ImportError'>: No module named lucene 

********** Error ********** 

ERROR: PL/Python: PL/Python function "to_tsvector_luc" failed 
SQL state: XX000 
Detail: <type 'exceptions.ImportError'>: No module named lucene 

¿Cómo se instala el módulo en pl/pitón, de modo que pueda importarlo desde dentro de mi código de procedimiento almacenado?

Respuesta

17

pl/python tiene acceso a todos los módulos que el intérprete de Python normal tendría mientras estén en el $PYTHONPATH en el servidor (y el usuario que ejecuta el servicio postgres). ¿Funciona import lucene si lo ejecuta en el intérprete de Python en el servidor?

Si su módulo está instalado en otro lugar (por ejemplo, no dist-packages etc.), necesitará editar su archivo /etc/postgresql/9.1/main/environment (ajustar a su versión de PostgreSQL) en el servidor y agregar algo como PYTHONPATH='<path to your module>'.

+0

'/ etc/postgresql/9.1/main/environment' sólo aparece a ser una cosa en Ubuntu, ver [aquí] (https://stackoverflow.com/questions/9595683/postgresql-environment-file-on-mac-osx) – bcattle

11

Desde la modificación PYTHONPATH del usuario postgres es probable que necesite un reinicio del servidor, que es algo más fácil de agregar la ruta desde el interior de Python, a través de

from sys import path 
path.append('/path/to/your/module') 
+0

Esta debería ser la respuesta aceptada –

Cuestiones relacionadas