31

pl/python 関数内にサードパーティ モジュールをインポートする必要があります。pl/python は、サードパーティ モジュールを持たない内部 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 にインストールして、ストアド プロシージャ コード内からインポートできるようにするにはどうすればよいですか?

4

4 に答える 4

26

$PYTHONPATHpl/python は、サーバー上 (および postgres サービスを実行するユーザー) にある限り、通常の Python インタープリターが持つすべてのモジュールにアクセスできます。サーバー上の Python インタープリターで実行すると機能しimport luceneますか?

モジュールが別の場所にインストールされている場合 (たとえば、dist-packages などではない) /etc/postgresql/9.1/main/environment、サーバー上のファイルを編集し (PostgreSQL のバージョンに合わせて調整)、次のようなものを追加する必要がありますPYTHONPATH='<path to your module>'

于 2011-11-07T11:50:39.760 に答える
18

postgres ユーザーの PYTHONPATH を変更すると、サーバーの再起動が必要になる可能性が高いため、Python 内からパスを追加する方が簡単です。

from sys import path
path.append( '/path/to/your/module' )
于 2013-10-30T23:28:07.467 に答える