Python может открыть файл, PL/Python не может

Подключено к mydb в PostgreSQL:

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

1 ответ

По предложению @hruske я использовал plpy.notice(os.path.abspath('mydir/myfile.xsl')) чтобы увидеть, как PL/Python пытается определить путь. это было /var/lib/postgresql/9.5/main/mydir/myfile.xsl что было явно не то, что я имел в виду.

Абсолютный путь сработал в конце концов. Копирование файла в место, которое было проще ввести как абсолютный путь, устранило "проблему".

Для дальнейшего чтения я рекомендую начинающему Соко Моринаги освоить мастер: продолжающийся урок в меру собственной глупости.

Другие вопросы по тегам