pet*_*mlm 6 python postgresql stored-procedures
PostgreSQL 存储过程中可以包含 Python 代码。例如:
CREATE FUNCTION someProc()
RETURNS void AS $$
# Some Python3 code...
$$ LANGUAGE plpython3u;
Run Code Online (Sandbox Code Playgroud)
但是我怎样才能从这段代码中包含一个Python文件呢?
PostgreSQL中运行的Python的当前目录是这样的:
>>> os.getcwd()
... /var/lib/postgresql/9.3/main
Run Code Online (Sandbox Code Playgroud)
我尝试了以下方法,效果很好:
CREATE FUNCTION someProc()
RETURNS void AS $$
import sys
sys.path.append("/dir/to/file")
from python_file import pythonFunction
# More Python code
$$ LANGUAGE plpython3u;
Run Code Online (Sandbox Code Playgroud)
由于许多明显的原因,这看起来不太好。有没有更好的方法来导入 python 文件,或者只是从 python 文件调用 python 函数?
编辑:没有任何特定的 PostgreSQL 方法来导入文件。但最好的方法是下面的正确答案,它类似于我原来的解决方案,但更好。
这与从独立 Python 中的文件动态加载 Python 代码没有什么不同:
PL/Python3(不受信任)只是嵌入在 PostgreSQL 后端进程中运行的 cpython 解释器,与 PostgreSQL 自身运行的操作系统用户相同。它只是 Python,只有很少的差异(例如线程安全)。