PostgreSQL: 如何安装 plpythonu 扩展

11 浏览
0 Comments

PostgreSQL: 如何安装 plpythonu 扩展

我在Ubuntu 12.04.4上运行PostgreSQL 9.3.1。我想要使用plpython语言扩展,但是当我尝试使用它时出现错误:

错误:语言“plpythonu”不存在

当我尝试创建扩展时:

CREATE EXTENSION plpythonu

我得到错误:无法访问文件“$libdir/plpython2”:没有该文件或目录

经过搜索和阅读博客文章,我尝试安装额外的软件包,并将所有plpython文件从/usr/share/postgresql/9.1/extension复制到PostgreSQL似乎正在寻找它们的/opt/bitnami/postgresql/share/extension。至少这让我能够让PostgreSQL看到可用的扩展。当我运行:

SELECT name, default_version, installed_version FROM pg_available_extensions WHERE name LIKE('plpy*')

我得到:

    name    | default_version | installed_version 
------------+-----------------+-------------------
 plpython2u | 1.0             | 
 plpython3u | 1.0             | 
 plpythonu  | 1.0             | 

我仍然看不到我可以在/opt/bitnami/postgresql/lib中的plpython库。有人可以帮助我完成剩余的步骤使扩展正常工作吗?提前谢谢!

0
0 Comments

问题出现的原因是在升级旧数据库至PG11或PG12时,plpythonu函数也需要将语言从plpythonu改为plpython3u。解决方法是安装postgresql-contrib扩展。

在基于Debian的postgres 11.2上,需要执行以下命令来安装plpythonu扩展:

apt-get update && apt-get install postgresql-plpython3-11

在pg 12和Ubuntu 18上,可以使用以下命令来安装plpythonu扩展:

apt install postgresql-plpython3-12

然而,在执行SQL语句CREATE EXTENSION plpythonu;时会出现错误:

ERROR: could not open extension control file "/usr/share/postgresql/12/extension/plpythonu.control": No such file or directory

此时可以尝试使用CREATE EXTENSION plpython3u替代。

另外,可以尝试运行以下代码来确认CREATE EXTENSION plpython3uCREATE OR REPLACE FUNCTION return_version() RETURNS VARCHAR AS $$ import sys return sys.version $$ LANGUAGE plpython3u;是否正常工作:

CREATE OR REPLACE FUNCTION return_version() RETURNS VARCHAR AS $$ import sys return sys.version $$ LANGUAGE plpython3u;

需要注意的是,这种方法在Windows上可能无效。

如果在执行sudo apt-get update && apt-get install postgresql-plpython3-13时遇到以下错误:

E: Could not open lock file /var/lib/dpkg/lock-frontend - open (13: Permission denied)
E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), are you root?

可以通过安装postgresql-contrib扩展来解决该问题。

0
0 Comments

问题:如何在PostgreSQL上安装plpythonu扩展?

原因:在Raspbian 10 (buster) / Linux raspberrypi 4.19.97-v7+ #1294上安装PL/Python 3的过程中,出现了连接错误。

解决方法:

1. 使用以下命令查找可安装的版本:

pi:~/$ sudo apt-cache search ".*plpython3.*"
postgresql-plpython3-11 - PL/Python 3 procedural language for PostgreSQL 11

2. 使用以下命令安装扩展:

sudo apt-get install postgresql-contrib postgresql-plpython3-11

3. 使用以下命令启动PostgreSQL服务:

sudo systemctl start postgresql

或者使用以下命令将其设置为开机自启动:

sudo systemctl enable postgresql

4. 使用以下命令切换到postgres用户:

sudo su - postgres

5. 进入psql命令行:

psql

6. 使用以下命令创建扩展:

CREATE EXTENSION plpython3u;

7. 使用以下命令验证扩展是否安装成功:

select * from pg_language;

以上解决方法可以确保`CREATE EXTENSION plpython3u`和`select * from pg_language`正常工作。如果还需要运行以下命令:

CREATE OR REPLACE FUNCTION return_version() RETURNS VARCHAR AS $$ import sys return sys.version $$ LANGUAGE plpython3u;

请注意,该命令在Windows上不起作用。更多信息请参考PostgreSQL 13 + Python 3.7.9 + plpython3u: 'psql: server closed the connection unexepectedly.' + 'The application has lost the database connection.'

经确认,以上命令可以正常工作。创建函数后,可以运行`SELECT return_version();`命令来获取输出结果:

return_version ------------------------------------------ 3.8.10 (default, Jun 2 2021, 10:49:15) + [GCC 9.4.0] (1 row)

然而,尚未找到一种方法来导入还未安装的Python包。如果您知道如何解决这个问题,请提供答案。更多信息请参考Linux: How to install a Python package so that it is found by the already working PostgreSQL 13 plpython3u extension?

0
0 Comments

问题的原因是使用的是Bitnami提供的PostgreSQL软件包,而不是Ubuntu的postgresql软件包。因此,安装postgresql-plpython扩展无法为实际使用的PostgreSQL软件包提供PL/Python支持。解决方法是使用与安装Bitnami PostgreSQL时相同的方法添加PL/Python支持,或者使用建议的来自http://apt.postgresql.org/的软件包。根据Bitnami社区的回答,他们目前还不支持PL/Python扩展。对于Ubuntu 18 LTS,需要使用适当的postgresql-plpython软件包,并且还需要考虑选择python3。关于找不到"/usr/share/postgresql/12/extension/plpythonu.control"的问题,建议提出新的问题来解决。

0