2016-09-22 50 views
1

連接到PostgreSQL的MYDB:Python可以打開文件,PL/Python不能

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文件...

+0

如果你使用絕對路徑怎麼辦? – Gerrat

+0

這是我的第一個想法。它沒有工作。 (相應地編輯上述內容) –

+0

好吧,很可能文件的路徑不正確,或者PostgreSQL進程無權讀取此文件。 – Gerrat

回答

0

在@ hruske的建議我用plpy.notice(os.path.abspath('mydir/myfile.xsl'))看看PL/Python是如何解決路徑。這是/var/lib/postgresql/9.5/main/mydir/myfile.xsl,這顯然不是我想到的。

絕對路徑畢竟奏效。將文件複製到易於輸入爲絕對路徑的位置可解決「問題」。

爲了進一步閱讀,我推薦Soko Morinaga的Novice to Master: An Ongoing Lesson in the Extent of My Own Stupidity