gpt4 book ai didi

postgresql-9.1 - 安装 plpython 时 Postgres 数据库崩溃

转载 作者:行者123 更新时间:2023-12-04 17:53:31 31 4
gpt4 key购买 nike

我正在尝试在我的 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.so

但是我已经安装了 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

最佳答案

注意:从 PostgreSQL 9.1 开始,大多数过程语言已经被制作成“扩展”,因此应该用 安装。创建扩展 不是创造语言。直接使用 CREATE LANGUAGE 现在应该仅限于扩展安装脚本。如果您的数据库中有“裸”语言,可能是升级的结果,您可以使用 CREATE EXTENSION langname FROM unpackaged 将其转换为扩展。

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

从 shell 命令行使用 createlang plpythonu dbname

警告

createlang 已弃用,可能会在 future 的 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 Shell 我输入
    mydb=# CREATE EXTENSION plpython3u FROM unpackaged;

    我收到了消息
    CREATE EXTENSION

    寻找结果:
    mydb=# SELECT * FROM pg_available_extensions
    mydb-# WHERE name LIKE '%python%' ORDER BY name;

    这是 的 installed_version 1.0 plpython3u

    我也可以在 PgAdmin III 中看到它

    希望有帮助!

    Postgresql 9.1

    编辑:

    手动试试

    第1步

    mydb=# CREATE PROCEDURAL LANGUAGE plpython2u;



    第2步

    mydb=# COMMENT ON PROCEDURAL LANGUAGE plpython2u IS 'PL/Python2U untrusted procedural language';



    第 3 步

    mydb=# CREATE EXTENSION plpython2u FROM unpackaged;



    用 Python 2.6.5 测试

    关于postgresql-9.1 - 安装 plpython 时 Postgres 数据库崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12010344/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com