从PostgreSQL存储过程导入python文件

Importing Python file from PostgreSQL stored procedure

本问题已经有最佳答案,请猛点这里访问。

PostgreSQL存储过程中可能有python代码。例如:

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

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

PostgreSQL中运行的python的当前目录是:

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

我尝试了以下方法,这是有效的:

1
2
3
4
5
6
7
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方法来导入文件。但最好的办法是在下面的正确答案,这类似于我的原始解决方案,但它是更好的。


这与从独立python中的文件动态加载python代码没有区别:

  • 如何导入给定完整路径的模块?

pl/python3(不可信)只是运行在postgresql后端进程中的cpython解释器,与它自己运行的操作系统用户postgresql相同。有一些区别——比如线程安全——它只是Python。


你从文件中看到这个了吗?

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