5

Postgres 9.1 に plpython をインストールしようとしていますが、サーバーがクラッシュします。

postgres@dataserver1:~> /opt/postgres/9.1/bin/psql -d mydb
psql.bin (9.1.4)
Type "help" for help.

mydb=# create language 'plpythonu';
The connection to the server was lost. Attempting reset: Failed.

私はpython 2.6.8をインストールしており、ハンドラーはシステムで正しく宣言されています:

select tmplname, tmplhandler, tmpllibrary from pg_pltemplate where tmplname like 'plpython%'

"plpythonu"  | "plpython_call_handler"  | "$libdir/plpython2"
"plpython2u" | "plpython2_call_handler" | "$libdir/plpython2"

そしてハンドラは $libdir にインストールされます:

postgres@dataserver1:~> ll /opt/postgres/9.1/lib/postgresql/plpython*
-rwxr-xr-x 1 root root 6686333 Aug 17 14:27 /opt/postgres/9.1/lib/postgresql/plpython2.so

これに関する手がかりは高く評価されます

編集

拡張機能 plpythonu、plpython2u、および plpython3u を作成しようとしましたが、それらはすべてサーバーをクラッシュさせます。

ドキュメントを少し読んで、インストールされている拡張機能を一覧表示する \dx コマンドを見つけました。

mydb=# \dx
                 List of installed extensions
  Name   | Version |   Schema   |         Description
---------+---------+------------+------------------------------
 plpgsql | 1.0     | pg_catalog | PL/pgSQL procedural language
(1 row)

したがって、インストールされている拡張機能はplpgsqlだけだと思います。

mydb=# select name, installed_version from pg_available_extensions where name like '%python%';
    name    | installed_version
------------+-------------------
 plpython2u |
 plpython3u |
 plpythonu  |
(3 rows)

そして私の拡張ディレクトリ:

postgres@dataserver1:/opt/postgres/9.1/share/postgresql/extension> ll *python*
-rw-r--r-- 1 root root 351 Aug 20 17:32 plpython2u--1.0.sql
-rw-r--r-- 1 root root 196 Aug 20 17:32 plpython2u.control
-rw-r--r-- 1 root root 402 Aug 20 17:32 plpython2u--unpackaged--1.0.sql
-rw-r--r-- 1 root root 351 Jun  1 02:54 plpython3u--1.0.sql
-rw-r--r-- 1 root root 196 Jun  1 02:54 plpython3u.control
-rw-r--r-- 1 root root 402 Jun  1 02:54 plpython3u--unpackaged--1.0.sql
-rw-r--r-- 1 root root 347 Aug 20 17:32 plpythonu--1.0.sql
-rw-r--r-- 1 root root 194 Aug 20 17:32 plpythonu.control
-rw-r--r-- 1 root root 393 Aug 20 17:32 plpythonu--unpackaged--1.0.sql

編集

私は Linux SuSE で実行していますが、あなたの言いたいことはわかりました。

私の postgres インストールでは、pl-lang ライブラリは .../postgres/9.1/lib/postgres にあります。その中に plpython2.so と plpython3.so があります

これらのファイルのダイナミック リンク ライブラリを確認しています。

alfonso@dataserver1:/opt/postgres/9.1/lib/postgresql> sudo ldd plpython2.so
        linux-vdso.so.1 =>  (0x00007fff5e945000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f64064df000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f64062da000)
        libutil.so.1 => /lib64/libutil.so.1 (0x00007f64060d7000)
        libm.so.6 => /lib64/libm.so.6 (0x00007f6405e5e000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f6405ae9000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f6406b2e000)

plpython3.so に対しても、Python ライブラリへの参照もありません。

しかし、python 2.6 と python 3.2 をインストールしました。Python 2 の拡張機能をインストールしたいことに注意してください。

はい、CREATE EXTENSION はまだクラッシュしています。

mydb=# create extension plpython2u;
The connection to the server was lost. Attempting reset: Failed.
!> \q
4

2 に答える 2

8

注: PostgreSQL 9.1 の時点で、ほとんどの手続き型言語は「拡張機能」になっているため、CREATE LANGUAGE ではなく CREATE EXTENSIONを使用してインストールする必要があります。CREATE LANGUAGE の直接使用は、拡張機能のインストール スクリプトに限定する必要があります。おそらくアップグレードの結果として、データベースに「裸の」言語がある場合は、パッケージ化されていない CREATE EXTENSION langname FROM を使用して、それを拡張機能に変換できます。

PL/Pythonを特定のデータベースにインストールするには:

シェル コマンド ラインからcreatelang plpythonu dbnameを使用します。

注意

createlang は推奨されておらず、将来の PostgreSQL リリースで削除される可能性があります。代わりに、CREATE EXTENSION コマンドを直接使用することをお勧めします。

http://www.postgresql.org/docs/9.1/static/plpython.html

編集

一歩一歩

postgresql-9.1.5-1-windows.exe をダウンロードしてインストールします。

まず、すでにあるものを見てみましょう。

mydb=# SELECT * FROM pg_available_extensions
mydb-# WHERE name LIKE '%python%' ORDER BY name;
    name    | default_version | installed_version |                  comment

------------+-----------------+-------------------+-------------------------------------------
 plpython2u | 1.0             |                   | PL/Python2U untrusted procedural language
 plpython3u | 1.0             |                   | PL/Python3U untrusted procedural language
 plpythonu  | 1.0             |                   | PL/PythonU untrusted procedural language
(3 Zeilen)

何もインストールされていません!!

libフォルダを見てみるとあるだけです。

....\PostgreSQL\9.1\lib\plpython3.dll.

したがって、plpython3u をインストールする必要があります。

mydb=# CREATE EXTENSION plpython3u;
ERROR:  unknown error »$libdir/plpython3.dll«

plpython3.dll に問題があるはずです。

plpython3.dllを調べると、 python32.dllへの参照があります。

......

Export Table:
  Name:                          plpython3.dll
  Time Date Stamp:               0x502B366A (15.08.2012 06:40:58)
  Version:                       0.00
  Ordinal Base:                  1
  Number of Functions:           9
  Number of Names:               9

  Ordinal   Entry Point   Name
        1   0x00001005    Pg_magic_func
        2   0x00001019    PyInit_plpy
        3   0x0000101E    _PG_init
        4   0x00001023    pg_finfo_plpython3_call_handler
        5   0x0000100F    pg_finfo_plpython3_inline_handler
        6   0x0000100A    pg_finfo_plpython3_validator
        7   0x00001028    plpython3_call_handler
        8   0x00001014    plpython3_inline_handler
        9   0x0000102D    plpython3_validator

Import Table:
  libintl-8.dll
    Import Adress Table:                0x00016628
    Import Name Table:                  0x0001617C
    Time Date Stamp:                    0x00000000
    Index of first forwarder reference: 0x00000000

    0x000169E4        28   libintl_dngettext
    0x000169D0        27   libintl_dgettext

  **python32.dll**
    Import Adress Table:                0x0001686C
    Import Name Table:                  0x000163C0
    Time Date Stamp:                    0x00000000
    Index of first forwarder reference: 0x00000000
  ....
  • python-3.2.3.msi をダウンロードしてインストールします。python3.dllしか見つかりませんでした
  • python3.dll を ....\PostgreSQL\9.1\lib にコピーし、名前を python32.dllに変更します。

SQLシェルに戻り、入力しました

mydb=# CREATE EXTENSION plpython3u FROM unpackaged;

メッセージを受け取りました

CREATE EXTENSION

次の方法で結果を探します。

mydb=# SELECT * FROM pg_available_extensions
mydb-# WHERE name LIKE '%python%' ORDER BY name;

plpython3uの installed_version 1.0があります。

PgAdmin IIIでも見ることができます

それが役立つことを願っています!

Postgresql 9.1

編集:

手動で試す

ステップ1

mydb=# 手続き型言語の作成 plpython2u;

ステップ2

mydb=# 手続き言語に関するコメント plpython2u IS 'PL/Python2U untrusted procedural language';

ステップ 3

mydb=# CREATE EXTENSION plpython2u FROM unpackaged;

Python 2.6.5 でテスト済み

于 2012-08-17T18:02:39.690 に答える
0

WIN 8.1 64 ビットに Python 2.7 がインストールされた Postgres 9.0。参考:これがエラーを解決する方法です。CREATE LANGUAGE plpythonu; を実行しているときに、ライブラリ "C:/Program Files/PostgreSQL/9.0/lib/plpython.dll" をロードできませんでした。pgAdminで

  • EnterpriseDB から Postgresql 9.0 をインストールした後、パス C:\Program Files\PostgreSQL\9.0\lib にファイル「plppython.dll」が含まれている必要があります。
  • このファイルを依存関係ウォーカーなどのプログラムでチェックすると、python26.dll が見つからないことがわかります
  • C:\windows\system32 カタログを見ると、ファイル python27.dll が見つかるはずです
  • python27.dll のコピーを作成 -> python26.dll
  • C:\windows\system32 が PATH 変数にあることを確認してください
  • CREATE LANGUAGE plpythonu; を実行します。im pgAdmin
于 2014-02-18T15:35:55.577 に答える