从 PostgreSQL 存储过程导入 Python 文件

Importing Python file from PostgreSQL stored procedure

在 PostgreSQL 存储过程中可以有 Python 代码。例如:

CREATE FUNCTION someProc()
RETURNS void AS $$
    # Some Python3 code...
$$ LANGUAGE plpython3u;

但是我如何从这段代码中包含一个 python 文件?

PostgreSQL中Python运行的当前目录是这样的:

>>> os.getcwd()
... /var/lib/postgresql/9.3/main

我尝试了以下方法,效果很好:

CREATE FUNCTION someProc()
RETURNS void AS $$
    import sys
    sys.path.append("/dir/to/file")
    from python_file import pythonFunction
    # More Python code
$$ LANGUAGE plpython3u;

由于许多显而易见的原因,这似乎不太好。有没有更好的方法来导入 python 文件,或者只是从 python 文件调用 python 函数?

编辑: 没有任何特定的 PostgreSQL 方法来导入文件。但最好的方法是在下面的正确答案中,它类似于我原来的解决方案但更好。

你从文档中看到了吗?

http://www.postgresql.org/docs/9.0/static/plpython.html

这与从独立的文件中动态加载 Python 代码没有什么不同 Python:

  • How to import a module given the full path?

PL/Python3(不受信任)只是嵌入在 PostgreSQL 后端进程中的 cpython 解释器 运行,作为其自身运行的同一操作系统用户 PostgreSQL。只有很少的差异 - 比如线程安全 - 它只是 Python.