Postgres - Copy (раздельные двойные кавычки) - PullRequest
5 голосов
/ 23 февраля 2012

Я использую копию Postgres 8.4.4, http://www.postgresql.org/docs/8.4/static/sql-copy.html, для импорта данных CSV в мою базу данных.Некоторые значения в моих исходных данных содержат двойные кавычки, которые удаляются после вставки, тогда как когда я делаю оператор INSERT или UPDATE через psql для проверки двойных кавычек, они сохраняются.Может быть, давая подсказку о том, что происходит, некоторые значения также содержат запятые, которые сохраняются по мере необходимости.

Я попытался решить проблему на основе информации в http://www.postgresql.org/docs/8.3/interactive/sql-syntax-lexical.html, но безуспешно.

Я использую команду копирования:

copy my_table (field_1, field_2, field_3 ...) from '/tmp/source.csv' with csv

Исходные данные заключаются в двойные кавычки с разделителем запятых.Это можно изменить, если необходимо ...

"значение", "другое значение", "это" другое "значение", "не более, спасибо"

1 Ответ

7 голосов
/ 23 февраля 2012

Вам нужно будет заключить в кавычки. По умолчанию их удваивают, поэтому ваши данные должны быть:

"value","another value","this is ""another"" value","no more, thanks"

Другой способ - работать без кавычек (но вы должны будете заключать в кавычки, если они есть), например

 value,another value,this is "another" value,no more, thanks

ОБНОВЛЕНИЕ: Это работает, но вы должны убедиться, что встроенные символы "" заключены в кавычки (в данном случае добавив обратную косую черту)

DROP TABLE tmp.my_table CASCADE;
CREATE TABLE tmp.my_table
        ( field_1 varchar
        , field_2 varchar
        , field_3 varchar
        , field_4 varchar
        );

COPY tmp.my_table (field_1,field_2,field_3,field_4)
FROM STDIN
WITH CSV DELIMITER ',' QUOTE '"' ESCAPE '\'
        ;
"value","another value","this is \"another\" value","no more, thanks"
\.
        ;

SELECT * FROM tmp.my_table;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...