从PostgreSQL存储过程中导入Python文件

6

在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方法来导入文件。但是下面正确答案中的最佳方法类似于我的原始解决方案,但更好。
2个回答

3
这与在独立的Python文件中动态加载Python代码没有什么区别: PL/Python3(不受信任)只是作为嵌入在PostgreSQL后端进程中运行的cpython解释器,与PostgreSQL本身以相同的操作系统用户身份运行。除了线程安全等极少数差异外,它就是Python。

谢谢,虽然我不认为这是一个重复的问题,因为我正在寻找一个特定的PostgreSQL存储过程方法,发现没有,解决方案实际上是一个更通用的Python方法。但再次感谢! - petermlm
1
当然可以-提问是有帮助的,现在这个问题将会引导人们去寻找更一般的答案,当他们寻找PL/PgSQL时。如果我认为它是100%的重复,我就会直接关闭它而不发表回答。 - Craig Ringer
啊,好的,我以为这个问题会被删除或者什么的。对于造成的困惑,我很抱歉,再次感谢。 - petermlm

0

嗯,是的,我已经查阅了文档,但在那里没有找到解决方案。 - petermlm
1
在plpython的文档中,它在哪里提到了读取外部文件来加载Python代码?我认为您没有完全阅读问题。 - Craig Ringer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接