问题标签 [postgres-plpython]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
564 浏览

python - 无法为 postgres 12 安装 plpython

首先,我的问题是在阅读了许多其他问题后发布的,例如 在 Windows 上安装 PL/Python for PostgreSQL 12 以及对以前方法和评论的各种试验。

但是当我尝试使用 pl/python 时,我已经被困了大约一个半月。

配置

我使用了 edb postgresql-12.1-3-windows-x64 包,包括

-PostgreSQL 12.1,由 Visual C++ build 1914 编译,64 位

-pgadmin4 作为 gui

- 语言包。

+在语言包之上分别安装了各种版本的python(因为它不起作用)。现在我在 Python 3.7.6 v3.7.6:43364a7ae0, [MSC v.1916 64 bit (AMD64)] on win32

问题

当我运行“CREATE EXTENSION plpython3u;”时

我收到一条看似经典的错误消息“错误:无法加载库“C:/Program Files/PostgreSQL/12/lib/plpython3.dll”:找不到指定的模块。”

根据阅读多篇文章和文章,我的理解是需要 2 个元素

1.正确的python解释器

Python 运行时需要匹配 PostgresSQL 版本 PostgreSQL 文件夹内的文档指出

过程语言 pl/Perl、pl/Python 和 pl/Tcl 包含在 PostgreSQL 的此发行版中。该服务器是使用这些语言解释器的 LanguagePack 社区发行版构建的。要在 PostgreSQL 中使用这些语言中的任何一种,请下载并安装适当的解释器,并确保它们包含在启动数据库服务器的 PATH 变量中。使用的版本如下所示 - 较新的次要(错误修复)版本也可能有效,但尚未经过测试:Python 3.7

通过软件“dependency walker”运行在 C:\program files\postgresql\12\lib 中找到的 plpython3.DLL 时,根据我安装的 python 版本,我得到了各种结果。

- 当我使用 python 3.7.6 () 32 位时,它似乎在某种程度上起作用。至少找到了依赖关系,但它是红色的,在依赖于 python dll 的其他 dll 中带有一些问号:

在此处输入图像描述

- 当我运行 PostgreSQL 64 位时,我卸载了它,现在我正在运行 python 3.7.6 () 64 位,如帖子开头所述。不知何故,这让事情变得更糟,因为我现在在 python37dll 前面只有一个问号,没有别的。好像再也找不到了。为什么 ????

2.设置环境变量PATH和PYTHONHOME

现在文档https://www.enterprisedb.com/edb-docs/d/edb-postgres-advanced-server/user-guides/language-pack-guide/12/EDB_Postgres_Language_Pack_Guide.1.09.html#和论坛帮助管理员https://postgresrocks.enterprisedb.com/t5/PostgreSQL/unable-to-install-pl-python-extension/td-p/4059/

提到需要更改环境变量 PATH 和 PYTHONHOME。类似的东西

论坛提到您需要使用命令提示符更改它们。该文档并未具体说明您应该如何执行此操作,但我认为这意味着python解释器本身

无论哪种方式它都不起作用。当我使用命令提示符时,没有答案:没有错误,没有什么。它只是在另一条线上开始新的。我被教导了这个echo %PYTHON_HOME%命令,似乎至少在会话中考虑到了它。但我仍然有同样的错误。关于这一点,有人向我提到命令提示符方法无论如何都是错误的,因为它需要通过命令方法运行 postgresql。他告诉我我需要将其作为 windows 服务运行,但我不知道该怎么做。

在被困这么久之后,我真的很想继续前进,并且非常感谢任何见解。

0 投票
1 回答
119 浏览

python - PostgreSQL:PL/Python 函数不采用 ARRAY 输入参数

客观的:

  • 使用 PostgreSQL FTS 创建全文搜索引擎。

填充tsvector:

我有一个 tsvector 列。为了填充 tsvector 列,我正在执行一个触发器,该触发器调用一个执行自定义 PL/Python 函数的过程。

后续步骤:

触发器和过程函数

它类似于https://www.postgresql.org/docs/10/textsearch-features.html#TEXTSEARCH-UPDATE-TRIGGERS触发器,它调用messages_trigger过程(用 plpgsql 编写)。

但我调用的不是coalesce(new.title,'')and ,而是一个UDF,它具有文本数组作为输入参数。coalesce(new.body,'')

错误:

在摄取数据期间,它会引发错误:

问题:

Pl/Python 函数不允许使用ARRAY类型参数吗?

为了绕过这个问题,我正在对列表元素进行逗号分隔连接并将其传递给 custom_udf。在 custom_udf 中,我使用逗号分隔符拆分来取回列表。

0 投票
0 回答
77 浏览

postgresql - 将 plpython3 扩展添加到 Postgres/timescaledb Alpine Docker Image 导致 pg_vsnprintf: symbol not found

正如在这个问题中所问的那样,我尝试将 plpython3 扩展添加到我的 timescaledb/postgres(基于 linux alpine)图像中。

不幸的是,接受的答案似乎不再起作用。

我用以下代码更新了 dockerfile,但没有任何运气:

当我运行命令时,CREATE EXTENSION plpython3u; 我收到以下错误:

关于如何解决这个问题的任何想法?

这是用于测试目的的完整 dockerfile:

谢谢你的帮助

0 投票
0 回答
44 浏览

postgresql - PostgreSQL:如何安装 plpythonu 扩展 windows 服务器

我已经在 Windows server 2019 上安装了 PostgreSQL 12.6,由 Visual C++ build 1914 编译,64 位。

我正在尝试在 Windows 上的 PostgreSQL 中使用正文中的 Python 脚本编写一个函数,并且在尝试创建 plpython2u 扩展时遇到错误消息。我正在运行的命令是:

create language plpython2u;

但我不断收到错误

我在服务器上有 Python 2.7.16。

请建议如何解决此错误

0 投票
0 回答
69 浏览

postgresql - 在 postgresql 中运行 plpython 函数时出错

我的系统上安装了 Postgresql 12.8.1 版本和 python 3.7.6 版本。我想使用 plpython 创建一个触发函数,所以我使用CREATE EXTENSION plpython3u. 在尝试编译触发函数时,我遇到以下错误 -

错误:服务器意外关闭连接这可能意味着服务器在处理请求之前或期间异常终止

触发功能码:

我还没有找到解决方案。关于我应该做什么的任何想法?

更新:

  1. 我正在使用 Windows 10 作为我的操作系统。
  2. 关于我如何安装我的 plpython3u 扩展。我遇到了错误“找不到名为 plpython3u 的此类模块”,我在网上找到的修复方法是将 python37.dll 从本地 python 文件夹复制并粘贴到我的 C:/windows/System32 文件夹。之后,我能够使用命令创建 plpython3u 扩展 - CREATE EXTENSION plpython3u。
  3. 我正在使用具有超级用户权限的默认用户“postgres”。

下面是服务器日志的输出: 日志文件输出: