Доброго времени суток!
Postgresql под Windows. Пытаюсь выполнить COPY из файла:
"C:\Documents and Settings\USER1\Local Settings\Temp\cache.tmp"
Ни в какую не желает переваривать путь с пробелами - орёт, что нет такого файла.
Обратные слэши на прямые - заменял а-ля *nix, пытался и так:
"C:/DOCUME~1/USER1/LOCALS~1/TEMP/CACHE.TMP"
и так:
"C:/Documents\ and\ Settings/USER1/Local\ Settings/Temp/cache.tmp"
ни в какую - нет такого файла и всё тут.
Подскажите - в какой вид путь привести, чтобы postgres его проглотил?
Попробуйте "C:/Documents and
Попробуйте
"C:/Documents and Settings/USER1/Local Settings/Temp/cache.tmp"
либо
C:/Documents\ and\ Settings/USER1/Local\ Settings/Temp/cache.tmp
без кавычек
Спасибо за ответ, но я видимо
Спасибо за ответ, но я видимо поспешил и неверно поставил вопрос, и задать
его следовало-бы в разделе проблем с русификацией.
С длинными именами и пробелами всё в порядке, достаточно замены обратных слэшей
на прямые, а вот когда в пути присутствует русский язык, например:
C:/Documents and Settings/Пользователь1/Local Settings/Temp/cache.tmp
вот тут-то и возникают проблемы.
Можно это как-то решить или это неизлечимо?
Есть такая гипотеза. Как
Есть такая гипотеза.
Как известно кодировка русских букв в консоли Windows, в том числе и именах файлов cp866. А вы базу ставили либо с кодировкой UTF-8 либо в cp1251, вот отсюда и может быть источник всех проблем. Т.е. чтобы PostgreSQL скушал вашу COPY, надо ему сказать, что теперь кодировка на вводе cp866, что можно сделать ДО COPY командой:
SET CLIENT_ENCODING TO 'WIN866';
но в этом случае и данные, которые вы загружаете командой COPY должны быть в этой же кодировке.
Отсюда как вы понимаете есть проблема: PostgreSQL не сможет единовременно использовать разные кодировки для имени файла и для его содержимого, так что либо они должны быть одинаковыми, либо не используйте для COPY каталоги и файлы, содержащие русские буквы.