python venv可以与用于postgresql的plpython3u一起使用吗?

2024-05-16 11:20:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望plpython3u为python使用虚拟环境。我在PostgreSQL PL/Python: call stored procedure in virtualenv上看到了一些关于virtualenv的(旧的,不是特别清楚的)说明。但是,我还没有看到python venv的任何内容。能否做到这一点?如果可以,如何做到?谢谢

CCl


Tags: in内容virtualenvvenvpostgresql虚拟环境callpl
1条回答
网友
1楼 · 发布于 2024-05-16 11:20:35

如果PL/Python只需要一个venv环境,那么只需修改PostggreSQL单元文件中的ExecStart即可加载venv{}脚本

下面摘自PostgreSQL 14 systemd unit file of PGDG YUM installation(我的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匿名块中check ^{} with the ^{} module(我在我的venv环境中安装pyyaml

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=# 

相关问题 更多 >