Прежде чем я начну свой вопрос и справочную информацию, я хотел бы заявить, что я понимаю, что многие люди задавали аналогичный вопрос, но ни один из ответов на их вопросы не применим к моей ситуации.
Справочная информация: я пытаюсь правильно отформатировать очень большой CSV-файл, чтобы импортировать его в таблицу в моей базе данных PostgreSQL. Этот файл CSV содержит только два поля и разделитель ;
Возникшие проблемы/попытки решения
Проблема №1: разделителем является точка с запятой, и многие значения в одном из полей содержат точку с запятой. PostgreSQL это явно не нравится.
Решение № 1. Я использовал sed, чтобы изменить разделитель на строку символов, которая, как я знал, будет использоваться только как разделитель.
Проблема № 2: разделитель может быть только одним символом.
Решение № 2. Я изменил разделитель на символ Юникода, который, как я знал, не будет встречаться ни в каком другом виде, кроме разделителя.
Проблема №3: разделитель может быть только однобайтовым символом.
Решение № 3. Я решил вернуться к своим шагам и вместо того, чтобы возиться с разделителем, попытался использовать sed для заключения всех значений полей в двойные кавычки, чтобы избежать проблемы с некоторыми значениями, содержащими символ-разделитель. В частности, я попытался использовать команду, найденную в ответе на этот вопрос, - оператор sed для изменения/изменения разделителей и разделителей CSV
Проблема № 4. Это приводило к множеству ошибок данных, поскольку каждый раз, когда в одном из значений был разделитель, его окружали двойными кавычками, и это заставляло Postgre SQL пытаться копировать значения, которые были слишком длинными и просто не были отдельными. ценности. Этот ряд здесь является прекрасным примером этого -
"m[redacted]@[redacted].com";"mk,l.";"/'"
Эта строка, в частности, заставила PostgreSQL подумать, что он копирует 3 столбца. Не говоря уже об этом ряду -
"[redacted]'";"of'";"all'";"your'";"[redacted]@[redacted].com";"[redacted]@[redacted].com:hapa[redacted]hoha"
Это заставило PostgreSQL скопировать всю оставшуюся часть файла во второе поле как одно значение.
Вопрос
После всего сказанного мой последний вопрос заключается в следующем: как я могу заключить каждое значение в файле CSV в двойные кавычки таким образом, чтобы оно было правильно импортировано в PostgreSQL?
Прямо сейчас я приперт к стене и был бы признателен за любой совет, даже если это не четкий ответ. Я пробовал все, что мог придумать. Если ответ вообще возможен, я бы хотел, чтобы он мог применяться к CSV-файлам, содержащим более двух полей, поскольку после этого у меня есть еще много CSV-файлов для импорта.