У меня есть таблица с 300000 строк не под моим контролем, что мне нужно импортироватьошибок, используя копию с в PostgreSQL, когда значение «2" %»
экспортировать данные из MySQL с помощью:.
mysqldump -u root --password=secret --fields-enclosed-by='\"' -T/tmp apflora_beob
Затем я пытаюсь импортировать каждую таблицу, используя, например:.
\copy beob_evab FROM '/Users/alex/tmp/beob_evab.txt' (FORMAT 'csv', DELIMITER E'\t', NULL '\N', ESCAPE E'\"', ENCODING 'UTF8');
Это работает для большинства таблиц, а также для одного, содержащих 450000 строк Но на одном я получаю эту ошибку:
ERROR: value too long for type character varying(10) CONTEXT: COPY beob_evab, line 190310, column COUV_MOUSSES: "2\% \N \N \N \N \N \N \N \N \N \N 30 \N 15 \N \N \N \N \N \N \N \N \N \N \N \N 0.01 \N \N Bachs, Dau..."
Когда я проверяю поле COUV_MOUSSES
в строке 190'310, он содержит это значение: 2"%
.
Что мне нужно изменить, чтобы заставить это работать?
Для достижения нужного результата "2""%"
в соответствии с @klin (спасибо!) Мне нужно было бы добавить --fields-escaped-by='"'
в команду mysqldump. Так что становится:
mysqldump -u root --password=secret --fields-enclosed-by='"' --fields-escaped-by='"' -T/tmp apflora_beob
Проблема: в настоящее время нулевые значения экспортируются как "N
.
Ну, нет проблем, я подумал и изменил команду копирования, чтобы:
\copy beob_evab FROM '/Users/alex/tmp/beob_evab.txt' (FORMAT 'csv', DELIMITER E'\t', NULL '"N', ESCAPE "'", ENCODING 'UTF8');
Это производит следующее сообщение об ошибке в Postgres:
ERROR: CSV quote character must not appear in the NULL specification
И это, кажется, что представление нулевых значений может не изменяются в MySQL.
не должно быть 'MySQLDump -u корень --password = секретные --fields-вложенной от =» "'-T/tmp apflora_beob'? – klin
yesah' --fields-enclosed-by =' "'' тоже работает. Кажется, что он работает так же, как '--fields-enclosed-by = '\' ''. Но не мешает MySQL экспортировать '' N' в качестве нулевых значений – Alex
Я имею в виду: 'mysqldump -u root -password = secret --fields-enclosed-by = '"' --fields-escaped-by = '\\' -T/tmp apflora_beob' – klin