web-dev-qa-db-ja.com

postgresとpython

Postgres 9.2では、トリガーとなるpythonプログラムを作成しようとしています。外部プログラム(ローカルディスク上のexe)を実行したいので、pythonを実行するには、次のような単純なプログラムを作成しようとすると、次のようになります。

CREATE FUNCTION one ()
RETURNS int
AS $$
# PL/Python function body
$$ LANGUAGE plpythonu;

エラーが発生します:

ERROR:  language "plpythonu" does not exist
HINT:  Use CREATE LANGUAGE to load the language into the database.

私が走るとき:

CREATE LANGUAGE plpythonu

エラーが発生します:

ERROR:  could not access file "$libdir/plpython2": No such file or directory

私はWindows7とpython 2.5を使用しています。

私は多くの場所を調べましたが、解決策を見つけることができません。

何か案は?

19
Jim

Plpython3でこれを解決するには、次のことを行う必要がありました。

  • インストールPython 3.2
  • 実行CREATE LANGUAGE plpython3u

更新:私はここにもっと良い説明を書きました: https://stackoverflow.com/a/24218449/39867

7
Craig Ringer

文字通り数日前に、私はこの問題を解決しました。解決策は非常に複雑です。ここに行きます。

  1. python 3.2。*バージョンのみをシステムにインストールします。
  2. Postgresqlでは、「CREATE LANGUAGEplpython3u」コマンドを使用してPython 3言語サポートをインストールします。多くの場合、「ロードできません」.....\plpython3というエラーが表示されます。 dll "エラー126。(正しくインストールされている場合、エラーは表示されないことに注意してください。)

  3. 上記のエラーが発生した場合は、pythonインストールディレクトリ(デフォルトはC:\ python32)に移動し、DLLのフォルダで「python3.dll」を探します。このファイルをPostgresqlにコピーします。 Postgresのインストールディレクトリにあるlib 'フォルダ(デフォルトはc:\ program files\postgres\9.x\lib\")。このコピーしたファイルの名前をpython32.dllに変更します。

  4. ここで、「CREATELANGUAGEplpython3u」コマンドを再度実行します。今回はうまくいくはずです。

確認するには、postgresqlのシステムテーブルのpg_available_extensionsビューを確認してください。 plpython3uを含む行の「インストール済みバージョン」列には、バージョン番号が含まれている必要があります。

注:これはplpython3u言語でのみ機能します。 plpython2uの同様のプロセスはわかりません。

9

PostgresはPythonのActiveStateディストリビューションを使用します。おそらく、2.5が古すぎて、Postgresがplpython dllをロードできないか、適切なpythonがなかったためにインストールしませんでした。最近のpostgresは2.xではなくPython3に対するbuil6だと思います。 postgres libディレクトリでplpython3.dllを探して、必要なものを見つけることができます。

5
jlujan

インストールされていますpython 3.2(x64)y postgres 9.3(x64)

このコードを実行しますCREATE EXTENSION plpython3u

PostgresSQLのバージョン「installation-note.html」を確認することを忘れないでください。postgresSQLには特定のpythonバージョンがあります。

1
user3700545