首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安装plpython时Postgres数据库崩溃

安装plpython时Postgres数据库崩溃
EN

Stack Overflow用户
提问于 2012-08-17 17:26:33
回答 2查看 5.9K关注 0票数 5

我试图在Postgres 9.1中安装plpython,但它使服务器崩溃:

代码语言:javascript
复制
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,并且在系统中声明了处理程序的正确性:

代码语言:javascript
复制
select tmplname, tmplhandler, tmpllibrary from pg_pltemplate where tmplname like 'plpython%'

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

处理程序安装在$libdir中:

代码语言:javascript
复制
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命令列出了已安装的扩展:

代码语言:javascript
复制
mydb=# \dx
                 List of installed extensions
  Name   | Version |   Schema   |         Description
---------+---------+------------+------------------------------
 plpgsql | 1.0     | pg_catalog | PL/pgSQL procedural language
(1 row)

因此,我想唯一安装的扩展是plpgsql。

代码语言:javascript
复制
mydb=# select name, installed_version from pg_available_extensions where name like '%python%';
    name    | installed_version
------------+-------------------
 plpython2u |
 plpython3u |
 plpythonu  |
(3 rows)

我的分机目录是:

代码语言:javascript
复制
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

检查这些文件的动态链接库:

代码语言:javascript
复制
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)

没有引用任何python库,plpython3.so也没有引用。

但是我已经安装了python2.6和python3.2。请注意,我希望安装python 2的扩展。

是的,创建扩展仍然在崩溃:

代码语言:javascript
复制
mydb=# create extension plpython2u;
The connection to the server was lost. Attempting reset: Failed.
!> \q
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-17 18:02:39

注意:在PostgreSQL 9.1中,大多数过程语言都已变成“扩展”,因此应该与创建扩展而不是CREATE LANGUAGE一起安装。直接使用CREATE语言现在应该仅限于扩展安装脚本。如果您的数据库中有一种“裸”语言,可能是升级的结果,您可以从未打包的将其转换为扩展。

要在特定数据库中安装PL/Python,请执行以下操作:

在shell命令行中,使用createlang

注意事项

createlang是不推荐的,并可能在未来的PostgreSQL版本中删除。建议直接使用CREATE扩展命令。

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

编辑

循序渐进

下载PostgreSQL9.1.5-1-windows.exe并安装它。

首先让我们看看已经有什么了。

代码语言:javascript
复制
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。

代码语言:javascript
复制
mydb=# CREATE EXTENSION plpython3u;
ERROR:  unknown error »$libdir/plpython3.dll«

plpython3.dll.一定有什么问题

查看plpython3.dll,有一个对python32.dll.的引用

代码语言:javascript
复制
......

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
  ....
  • 我下载并安装python3.2.3.msi。我只发现了python3.dll
  • 将python3.dll复制到python32.dll并重命名为....\PostgreSQL\9.1\lib

回到Shell我输入了

代码语言:javascript
复制
mydb=# CREATE EXTENSION plpython3u FROM unpackaged;

我收到消息了

代码语言:javascript
复制
CREATE EXTENSION

使用:查找结果

代码语言:javascript
复制
mydb=# SELECT * FROM pg_available_extensions
mydb-# WHERE name LIKE '%python%' ORDER BY name;

it the installed_version 1.0 of plpython3u

我也可以在PgAdmin III中看到

希望这能帮上忙!

编辑:

手动试一试

第一步

mydb=#创建过程语言plpython2u;

第二步

mydb=#对过程语言plpython2u的评论是“PL/Python2U不可信的过程语言”;

第三步

mydb=#从未打包的基础上创建扩展plpython2u;

用Python2.6.5测试

票数 8
EN

Stack Overflow用户

发布于 2014-02-18 15:35:55

Postgres9.0和Python2.7安装在WIN 8.1 64位上。FYI:下面是我如何解决错误:在pgAdmin中运行CREATE语言plpythonu时无法加载库"C:/Program /PostgreSQL/9.0/lib/plpython.dll“

  • 从EnterpriseDB安装PostgreSQL9.0之后,路径C:\Program \ Postgresql \ 9.0 \lib应该包含文件"plppython.dll“
  • 使用像dependency这样的程序检查这个文件会发现它缺少一个python26.dll
  • 如果您查看C:\windows\system32 32目录,应该会找到python27.dll文件。
  • 创建python27.dll -> python26.dll副本
  • 确保C:\windows\system32 32在PATH变量中
  • 运行CREATE语言plpythonu;im pgAdmin
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12010344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档