#postgresql #pgadmin
#postgresql #pgadmin
Вопрос:
Когда я запускаю:
COPY con (date,kgs)
FROM 'H:Sir\data\reporting\hi.rpt'
WITH DELIMITER ','
CSV HEADER
date AS 'Datum/Uhrzeit'
kgs AS 'Summe'
Я получаю сообщение об ошибке:
WARNING: nonstandard use of \ in a string literal
LINE 2: FROM 'H:Sudhir\Conair data\TBreporting\hi.txt'
^
HINT: Use the escape string syntax for backslashes, e.g., E'\'.
У меня уже давно возникла эта проблема. Помогите?
Комментарии:
1. Ваш вопрос совершенно неясен. Пожалуйста, уточните это.
2. Что такое файл «text.rpt»? Какое приложение создало его? Какой это формат — это просто CSV или что-то еще? Какую версию PostgreSQL вы используете?
3. это
hi.rpt
crystal report
файл??4. «hi.rpt» — это отчет, сгенерированный программным обеспечением. я хочу извлечь конкретные данные из этого отчета, например, дату n вес n поместить их в базу данных для оценки.
5. Я использую PostgreSQL 9.0
Ответ №1:
Это не ошибка, это просто предупреждение. Это не имеет ничего общего с содержимым файла, это связано с настройкой PostgreSQL и синтаксисом COPY
команды, который вы используете.
Вы используете PostgreSQL после версии 8.1 с standard_conforming_strings
выключенным — либо до версии 9.1 (которая по умолчанию отключена), либо более новую версию с отключенным вручную.
Это приводит к обратным косым чертам в строках, например bobted
, интерпретируется как экранирование, так что строка будет bob<tab>ted
с буквальной табуляцией, как t
экранирование для табуляции.
Подобная интерпретация строк противоречит стандарту SQL, в котором нет экранирования обратной косой черты в стиле C. Несколько лет назад команда PostgreSQL решила перейти на стандартный способ работы с SQL. По соображениям обратной совместимости это было сделано в два этапа:
- Добавьте
standard_conforming_strings
опцию для использования стандартной интерпретации строк SQL, но по умолчанию она отключена. Выдает предупреждения при использовании нестандартной интерпретации строк PostgreSQL. Добавьте новыйE'string'
стиль, позволяющий приложениям явно запрашивать escape-обработку в строках. - Несколькими выпусками позже, включите
standard_conforming_strings
по умолчанию, как только пользователи обновят и исправят предупреждения, выдаваемые их приложениями. Предположительно.
Выход для
is \
. Таким образом, «удвоение» обратной косой черты, как у вас (или используемого вами инструмента), выполнено правильно. PostgreSQL выдает предупреждение, потому что он не знает, имели ли H:Sir\data\reporting\hi.rpt
вы в виду буквально H:Sir\data\reporting\hi.rpt
(как указано в спецификации SQL) или H:Sirdatareportinghi.rpt
(как это делал PostgreSQL, вопреки стандарту), когда вы писали.
Таким образом, в вашем запросе нет ничего плохого. Если вы хотите избавиться от предупреждения, либо включите standard_conforming_strings
, либо добавьте явное E''
в свою строку.
Комментарии:
1. Спасибо, Крейг, я включил standard_conforming_strings.
2. у меня есть несколько других проблем, связанных с тем же, что я отредактировал свой вопрос и предоставил все детали, также, пожалуйста, посмотрите.
3. @user3732694 Пожалуйста, отмените редактирование и отправьте как новый вопрос . Вернитесь к этому для контекста.
4. я задал новый вопрос, но ‘a_horse_with_no_name’ пометил мой вопрос как дублирующий. дело в том, что я до сих пор не получил ответа, можете ли вы мне помочь.
5. @user3732694 снова открылся и ответил. Пожалуйста, примите это, поскольку оно ответило на заданный вами вопрос.