Указание Windows путей в выражениях PostgreSQL
Не так уж и много выражений существует в диалекте SQL от Postgres'а, требующих в качестве аргумента путь файловой системы. С ходу могу назвать пару:
Итак, суть вопроса в том, что эти аргументы представлены строковыми константами. А это в свою очередь означает отсутствие лексической проверки, что ведёт к разным эффектам в разных операционных системах. Дабы не растекаться мыслью по древу:
НЕТ:
ДА:
P.S.: Я не поклонник абсолютных путей, а потому спрошу: «Почему мы имеем магию dynamic_library_path для CREATE FUNCTION, а для CREATE TABLESPACE ничего похожего нет (даже захудалого run-time параметра)?
- CREATE TABLESPACE…
- CREATE FUNCTION… (в случае динамической загрузки функций на языке C)
Итак, суть вопроса в том, что эти аргументы представлены строковыми константами. А это в свою очередь означает отсутствие лексической проверки, что ведёт к разным эффектам в разных операционных системах. Дабы не растекаться мыслью по древу:
| Пользователи Windows! Заменяйте привычные вам слеши (backslash'ы, на самом деле) такими вот слешами: '/', в параметрах, указывающих системный путь! |
НЕТ:
CREATE TABLESPACE dbspace
LOCATION 'C:\Program Files\PostgreSQL\8.3\data\dbs';
CREATE TABLESPACE dbspace
LOCATION E'C:\Program Files\PostgreSQL\8.3\data\dbs';
* This source code was highlighted with Source Code Highlighter.ДА:
CREATE TABLESPACE dbspace
LOCATION 'C:/Program Files/PostgreSQL/8.3/data/dbs';
CREATE TABLESPACE dbspace
LOCATION 'C:\\Program Files\\PostgreSQL\\8.3\\data\\dbs';
-- но с предупреждением! Настоятельно не рекоммендую делать так
CREATE TABLESPACE dbspace
LOCATION E'C:\\Program Files\\PostgreSQL\\8.3\\data\\dbs';
* This source code was highlighted with Source Code Highlighter.P.S.: Я не поклонник абсолютных путей, а потому спрошу: «Почему мы имеем магию dynamic_library_path для CREATE FUNCTION, а для CREATE TABLESPACE ничего похожего нет (даже захудалого run-time параметра)?



комментарии (3)