2011-11-07 121 views
13

我需要在我的pl/python函数中导入第三方模块。 看来pl/python使用了一个没有任何第三方模块的内部python。如何为postgres pl/python安装第三方模块?

我得到这样的错误:

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 

如何安装模块放到PL/Python的,这样我可以从里面我的存储过程的代码进口吗?

回答

17

只要在服务器(以及运行postgres服务的用户)的$PYTHONPATH中,pl/python就可以访问普通Python解释器所具有的所有模块。如果您在服务器上的Python解释器中运行它,import lucene是否可以正常工作?

如果您的模块安装在其他地方(例如不是dist-packages等),那么您需要编辑服务器上的/etc/postgresql/9.1/main/environment(调整到您的PostgreSQL版本)文件并添加诸如PYTHONPATH='<path to your module>'之类的文件。

+0

'的/ etc/PostgreSQL的/ 9.1 /主/ environment'似乎只成为一个在Ubuntu上的东西,看看[这里](https://stackoverflow.com/questions/9595683/postgresql-environment-file-on-mac-osx) – bcattle

11

因为Postgres用户的修改PYTHONPATH可能需要重新启动服务器,这是比较容易从内部Python中添加路径,通过

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

这应该是接受的答案 –