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
что было явно не то, что я имел в виду.
Абсолютный путь сработал в конце концов. Копирование файла в место, которое было проще ввести как абсолютный путь, устранило "проблему".
Для дальнейшего чтения я рекомендую начинающему Соко Моринаги освоить мастер: продолжающийся урок в меру собственной глупости.