2016-09-22 4 views
1

接続されたPostgreSQLではMYDBすることができます:Pythonのにオーバー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" 

を:

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

絶対パスは、PL/Pythonのを助けていないようでした。私がしたいのは、Postgresのquery_to_xml()を使って、XSLT変換を返します。しかしそれを行うには、xslファイルを読む必要があります...

+0

絶対パスを使用するとどうなりますか? – Gerrat

+0

それは私の最初の考えでした。それはうまくいかなかった。 (上記のように編集してください) –

+0

ファイルへのパスが正しくないか、PostgreSQLプロセスにこのファイルを読み取る権限がない可能性があります。 – Gerrat

答えて

0

@ hruskeの提案では、PL/Pythonがパスを解決しようとしていた方法を確認するためにplpy.notice(os.path.abspath('mydir/myfile.xsl'))を使用しました。それは/var/lib/postgresql/9.5/main/mydir/myfile.xslでしたが、明らかに私が気にしていたものではありませんでした。

結局、絶対パスが機能しました。絶対パスとして入力しやすい場所にファイルをコピーすると、「問題」が修正されました。

さらに読むには、森永宗子のNovice to Master: An Ongoing Lesson in the Extent of My Own Stupidityをお勧めします。

関連する問題