22

在 postgres 9.2 中,我正在尝试创建一个可以作为触发器的 python 程序。我想运行一个外部程序(本地磁盘上的一个 exe),所以我使用 python 来运行它。当我尝试创建一个这样的简单程序时:

CREATE FUNCTION one ()
RETURNS int
AS $$
# PL/Python function body
$$ LANGUAGE plpythonu;

我得到错误:

ERROR:  language "plpythonu" does not exist
HINT:  Use CREATE LANGUAGE to load the language into the database.

当我运行时:

CREATE LANGUAGE plpythonu

我得到错误:

ERROR:  could not access file "$libdir/plpython2": No such file or directory

我正在使用 Windows 7 和 python 2.5 。

我查看了很多地方,但找不到解决方案。

有任何想法吗?

4

5 回答 5

10

几天前,我刚刚解决了这个问题。解决方案非常复杂。就这样吧。

  1. 仅在您的系统上安装 python 3.2.* 版本。
  2. 在 Postgresql 中使用“CREATE LANGUAGE plpython3u”命令安装 Python 3 语言支持。很多时候会报下面的错误“unable to load”.....\plpython3.dll”error 126。(注意如果安装正确,不会显示错误。)

  3. 如果您遇到上述错误,请转到您的 python 安装目录(默认为 C:\python32)并在 DLL 的文件夹中查找“python3.dll”。将此文件复制到 Postgres 安装目录中的 Postgresql 'lib' 文件夹中(默认为 c:\program files\postgres\9.x\lib\")。将此复制的文件重命名为 python32.dll。

  4. 现在再次运行“CREATE LANGUAGE plpython3u”命令。这次应该可以了。

要验证,请查看 postgresql 系统表中的 pg_available_extensions 视图。包含 plpython3u 的行应该在“已安装版本”列中有一个版本号。

注意:这仅适用于 plpython3u 语言。我不知道 plpython2u 有任何类似的过程。

于 2013-02-04T07:41:29.930 回答
8

要为 plpython3 解决此问题,有必要:

  • 安装 Python 3.2
  • CREATE LANGUAGE plpython3u

更新:我在这里写了一个更好的解释:https ://stackoverflow.com/a/24218449/398670

于 2013-01-11T02:33:43.450 回答
5

Postgres 使用 Python 的 ActiveState 发行版。很可能,您的 2.5 太过时了,Postgres 无法加载 plpython dll 或没有安装它,因为没有合适的 python。我认为最近的 postgres 是针对 Python3 而不是 2.x 的 buil6。您可以在 postgres lib 目录中查找 plpython3.dll 以找出您需要的内容。

于 2012-12-31T22:16:00.763 回答
2

我安装了 python 3.2(x64) 和 postgres 9.3 (x64)

执行此代码CREATE EXTENSION plpython3u

不要忘记检查您的 postgresSQL 版本的“installation-note.html”,您的 postgresSQL 有特定的 python 版本

于 2014-06-02T18:48:01.607 回答
1

抱歉挖矿,但对于所有正在寻找丢失数据包的人(在我的情况下是在 Ubuntu 18.04 上):

sudo apt-get install -y postgresql-plpython3-10

进而:

create extension plpython3u;

于 2021-02-26T09:08:59.940 回答