PostgreSQL

индекс
124,74

Указание Windows путей в выражениях PostgreSQL

Не так уж и много выражений существует в диалекте SQL от Postgres'а, требующих в качестве аргумента путь файловой системы. С ходу могу назвать пару:
  • 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 параметра)?
+4
27 ноября 2009, 10:46
1

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

0
potapuff #
А под win это работает?
В документации сказано Tablespaces are only supported on systems that support symbolic links.
+1
pasha_golub #
Да, безусловно. :)
+1
CLR #
Вдобавок пропадет возможная путаница в японской и корейской локализациях с их йенами (¥) и вонами (₩) в качестве разделителей путей.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.