3

我希望 plpython3u 为 python 使用虚拟环境。我在PostgreSQL PL/Python 中看到了一些关于 virtualenv 的(旧的且不是特别清楚的)指令:在 virtualenv 中调用存储过程。但是我还没有看到任何关于 python venv 的东西。这可以做到吗?如果可以,怎么做?谢谢。

四氯化碳。

4

1 回答 1

1

如果您只需要一个venvPL/Python环境,您可以简单地ExecStart在PostggreSQL单元文件中修改以加载venv activate脚本。

以下摘自PGDG YUM 安装的 PostgreSQL 14 systemd 单元文件(我的venvls 位于/var/lib/pgsql/plpython/)。

ExecStartPre=/usr/pgsql-14/bin/postgresql-14-check-db-dir ${PGDATA}
#ExecStart=/usr/pgsql-14/bin/postmaster -D ${PGDATA}
ExecStart=/bin/bash -c "source /var/lib/pgsql/plpython/bin/activate && /usr/pgsql-14/bin/postmaster -D ${PGDATA}"

请注意,您需要将单元文件postgresql-14.service从复制/usr/lib/systemd/system//etc/systemd/system/并执行systemctl daemon-reload才能生效。

然后您可以检查PL/Python 匿名块中venvpkg_resources模块(我安装pyyaml在我的venv环境中)。

postgres=# CREATE EXTENSION plpython3u ;
CREATE EXTENSION
postgres=# DO $$
import pkg_resources
installed_packages = pkg_resources.working_set
installed_packages_list = sorted(["%s==%s" % (i.key, i.version)
   for i in installed_packages])
plpy.notice(installed_packages_list)
$$ LANGUAGE plpython3u;
NOTICE:  ['pip==9.0.3', 'pyyaml==5.4.1', 'setuptools==39.2.0']
DO
postgres=# 
于 2021-10-13T14:27:15.567 回答