我希望plpython3u使用python的虚拟环境。我在PostgreSQL PL/Python上看到了一些关于virtualenv的(旧的和不是特别清楚的(指令:在virtualenv中调用存储过程。但是我还没有看到任何关于python venv的东西。这能做到吗,如果可以,怎么能做到?谢谢。
覆 铜板。
如果你只需要一个 PL/Python 的venv
环境,你可以简单地修改 PostggreSQL 单元文件中的ExecStart
来加载venv
activate
脚本。
以下摘自PGDG YUM安装的PostgreSQL 14 systemd单元文件(Myvenv
ls位于/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匿名块中的pkg_resources
模块检查venv
(我在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=#