Как сохранить символ новой строки при выполнении команды копирования psql

У меня есть следующий контент в моем CSV-файле (с 3 столбцами):

141413,"\"'/x=/></script></title><x><x/","Mountain View, CA\"'/x=/></script></title><x><x/"

148443,"CLICK LINK BELOW TO ENTER^^^^^^^^^^^^^^","model\
\
xxx lipsum as it is\
\
100 sometimes unknown\
\
travel evening market\
"

Когда я импортирую вышеупомянутый csv в mysql, используя следующую команду, он обрабатывает обратную косую черту () как новую строку; что является ожидаемым поведением.

LOAD DATA INFILE '1.csv' INTO TABLE users FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\n';

вывод MYSQL

Но когда я пытаюсь импортировать в psql с помощью команды копирования, он воспринимает \ как обычный символ.

copy users from '1.csv' WITH (FORMAT csv, DELIMITER ',', ENCODING 'utf8', NULL "\N", QUOTE E'\"', ESCAPE '\');

вывод postgres


person Minu    schedule 13.06.2018    source источник
comment
Параметр ESCAPE определяет символ, который экранирует символ кавычки, он не имеет ничего общего с многострочными записями. Многострочные записи обнаруживаются автоматически, если значение указано правильно (в режиме CSV). Нужно убрать бэклеш из входного файла (вообще бэклеш не имеет значения в SQL)   -  person a_horse_with_no_name    schedule 13.06.2018


Ответы (1)


Попробуйте проанализировать эти \ перед импортом CSV-файла, например. используя perl -pe или sed и STDIN из psql:

$ cat 1.csv | perl -pe 's/\\\n/\n/g' | psql testdb -c "COPY users FROM STDIN WITH (FORMAT csv, DELIMITER ',', ENCODING 'utf8', NULL "\N", QUOTE E'\"', ESCAPE '\');"

Вот так это выглядит после импорта:

testdb=# select * from users;
   id   |                 company                 |                    location                     
--------+-----------------------------------------+-------------------------------------------------
 141413 | "'/x=/></script></title><x><x/          | Mountain View, CA"'/x=/></script></title><x><x/
 148443 | CLICK LINK BELOW TO ENTER^^^^^^^^^^^^^^ | model                                          +
        |                                         |                                                +
        |                                         | xxx lipsum as it is                            +
        |                                         |                                                +
        |                                         | 100 sometimes unknown                          +
        |                                         |                                                +
        |                                         | travel evening market                          +
        |                                         | 
(2 Zeilen)
person Jim Jones    schedule 13.06.2018