当前位置: 首页 > 知识库问答 >
问题:

安装plpython时Postgres数据库崩溃

申屠健
2023-03-14

我试图在我的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)

没有对任何python库的引用,plpython3也没有。所以

但是我已经安装了Python2.6和Python3.2。注意,我希望安装Python2的扩展。

是的,CREATE EXTENSION仍然崩溃:

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

共有2个答案

温嘉赐
2023-03-14

Postgres 9.0,在WIN 8.1 64位上安装了Python 2.7。仅供参考:以下是我解决错误的方法:在运行创建语言plpythonu时无法加载库“C:/Program Files/PostgreSQL/9.0/lib/plpython.dll”;在pgAdmin中

  • 从EnterpriseDB安装Postgresql 9.0后,路径C:\Program Files\Postgresql\9.0\lib应包含文件“plppython.dll”
昝唯
2023-03-14

注意:从PostgreSQL 9.1开始,大多数过程语言都被制作成“扩展”,因此应该使用创建扩展而不是创建语言来安装。现在,直接使用CREATE语言应该仅限于扩展安装脚本。如果您的数据库中有一种“裸”语言,可能是升级的结果,那么您可以使用CreateExtensionLangName fromUnpackage将其转换为扩展。

要在特定数据库中安装PL/Python:

在shell命令行中,使用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.一定有问题

查看Plython3。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。微星。我只找到蟒蛇3。dll

回到我输入SQLShell

mydb=# CREATE EXTENSION plpython3u FROM unpackaged;

我明白了

CREATE EXTENSION

寻找结果:

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

这是已安装的plpython3u的1.0版

我也可以在PgAdmin III中看到

希望有帮助!

编辑:

手动试试

第一步

mydb=#创建过程语言plpython2u;

步骤2

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

第三步

mydb=#从未打包创建扩展plpython2u;

使用Python 2.6.5进行测试

 类似资料:
  • 首先,我的问题是在阅读了许多其他问题后发布的,比如这个问题在Windows上安装PL/Python for PostgreSQL 12以及以前方法和注释的各种试验。 但我在尝试使用pl/python时已经被困了大约一个半月。 我使用了edb postgresql-12.1-3-windows-x64包,包括 -PostgreSQL 12.1,由Visual C build 1914编译,64位 -

  • 另一个尝试: 有没有人用美洲狮成功做到这一点?如果是的话,我错过了什么?感谢您对此问题的帮助!

  • 本文向大家介绍centOS7安装MySQL数据库,包括了centOS7安装MySQL数据库的使用技巧和注意事项,需要的朋友参考一下 1、先检测系统是否自带原有版本mysql安装包,如果有要先卸载删除,不然不能成功安装和启动; # rpm -qa|grep mysql      查看有哪些安装包,如果直接跳过,说明没有安装包,记忆可以直接进入第2、3 # yum remove mysql mysql

  • 这节课我们将来配置MySQL数据库,启动运行在另外一个容器中,然后把它link到users-service容器中...... 增加Flask-SQLAlchemy和PyMySQL到requirementx.txt文件中: Flask-SQLAlchemy==2.3.2 PyMySQL==0.8.0 当然要记得安装这些依赖包: (tdd3)$ pip install -r requirements

  • MySQL是最著名的开源数据库,现在正在开发的5.0版将具有大量的新特性,如存储过程和事务处理等。MySQL的性能正一步步地迫近Oracle、DB2等商业大型数据库,给这些产品造成了很大的压力。 在Debian中安装MySQL服务器是很方便的,使用apt-get命令即可完成。 debian:~# apt-get install mysql-server mysql-client mysql-s

  • 安装Mysql服务器 官方文档:安装和升级MySQL 这里给出在windows和linux中安装mysql服务器的方法,同时补充一种在docker中安装mysql容器的方法。 TIPS: 因为mysql在centos7中已经开始收费,因此本文在linux中实际安装的是mariadb。 windows 在windows下使用mysql服务器有两种方式,一种是使用mysql提供的MSI Install