本问题已经有最佳答案,请猛点这里访问。
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方法来导入文件。但最好的办法是在下面的正确答案,这类似于我的原始解决方案,但它是更好的。
这与从独立python中的文件动态加载python代码没有区别:
如何导入给定完整路径的模块?
pl/python3(不可信)只是运行在postgresql后端进程中的cpython解释器,与它自己运行的操作系统用户postgresql相同。有一些区别——比如线程安全——它只是Python。
谢谢,尽管我不会把这看作是一个重复的问题,因为我来找一个特定的PostgreSQL存储过程方法来发现没有,而这个解决方案实际上是一个更通用的python方法。但再次感谢!
当然,提问是很有帮助的,现在这个问题会让人们在寻找pl/pgsql时找到更一般的答案。如果我认为这是100%的重复,我会把它作为一个dup关闭而不发布答案。
啊,好吧,我以为这个问题会被删除或是别的什么。很抱歉弄混了,再次感谢。
你从文件中看到这个了吗?
http://www.postgresql.org/docs/9.0/static/plpython.html
嗯,是的,我已经研究了文档,但是没有找到解决方案。
在plpython文档中,它指的是读取外部文件以加载python代码吗?我认为你没有完全理解这个问题。
本文探讨了在PostgreSQL存储过程中导入Python文件的方法。作者尝试了通过修改系统路径来实现导入,但寻求更加优雅的解决方案。
2387

被折叠的 条评论
为什么被折叠?



