2

连接到 PostgreSQL 中的 mydb:

mydb=# CREATE FUNCTION file_test () RETURNS text AS $$
if open('mydir/myfile.xsl'): return 'success' 
$$ LANGUAGE plpythonu;
CREATE FUNCTION
mydb=# SELECT file_test();
ERROR:  IOError: [Errno 2] No such file or directory: 'mydir/myfile.xsl'
CONTEXT:  Traceback (most recent call last):
  PL/Python function "file_test", line 2, in <module>
    if open('mydir/myfile.xsl'): return 'success'
PL/Python function "file_test"

转到 Python:

>>> if open('mydir/myfile.xsl'): print 'success'
... 
success
>>> 

绝对路径似乎对 PL/Python 没有帮助。我想做的是使用 Postgres 的 query_to_xml() 并在返回时运行 XSLT 转换。但要做到这一点,我需要阅读 xsl 文件......

4

1 回答 1

0

在@hruske 的建议下,我曾经plpy.notice(os.path.abspath('mydir/myfile.xsl'))看到 PL/Python 是如何尝试解析路径的。是的/var/lib/postgresql/9.5/main/mydir/myfile.xsl,这显然不是我的想法。

毕竟绝对路径有效。将文件复制到更容易作为绝对路径键入的位置解决了“问题”。

为了进一步阅读,我推荐 Soko Morinaga 的新手到大师:我自己的愚蠢范围内的持续课程

于 2016-09-22T17:08:58.587 回答