CSV-файл будет загружен в корзину Amazon S3.
Текущая реализация:
Абсолютно без понятия, что там происходит после
После небольшого поиска в Google выяснилось, что команда copy в PostgreSQL - это самый быстрый способ ЧТЕНИЯ / ЗАПИСИ в БД PostgreSQL.
Это также поддерживается на нескольких языках Java, C, Python.
Пробовал использовать CopyManager API PostgreSQL, у которого есть перегруженные версии метода copyIn.
copyIn(String sql, InputStream is) - Мы не можем использовать это, поскольку наш csv содержит столбцы заголовков в первой строке, и мы хотим пропустить первую строку.
copyIn(String sql, Reader rd) - не принимает объект CSVReader, поскольку он не относится к типу java.io.Reader
Технологии




We cannot use this since our csv contains Header Columns in the first line & we want to skip first line.
Так что просто пропустите первую строку. copyIn() не "перематывает" полученный ридер. Вам также не нужно использовать CSVReader. Оператор copy позаботится о разборе файла CSV. Все, что вам нужно сделать, это предоставить считыватель, который находится в первой строке, которая должна быть обработана.
Что-то вроде:
CopyManager mgr = new CopyManager(...);
BufferedReader in = new BufferedReader(new FileReader(...));
in.readLine(); // skip the header line
mgr.copyIn("copy target_table from stdin with (...)", in);
Убедитесь, что вы указали соответствующие параметры в команде copy, чтобы файл можно было правильно проанализировать.
Я предоставил решение в следующем комментарии, ошибка, которую я сделал.
@a_horse_with_no_name как вы обрабатываете столбец формата даты перед командой копирования? например: в csv данные могут быть в формате дд / мм / гггг, дд-мм-гггг, дд.ммм.гггг и т. д., где, например, в таблице postgres по умолчанию используется формат гггг-мм-дд.
Я смог выяснить ошибку в коде. Мы предоставили один из столбцов базы данных как уникальное ограничение, чего не должно быть, тогда как в файле CSV есть повторяющиеся значения этого столбца. По этой причине вставка записи не удалась.
Спасибо, Phaneendra
@Phaneendra Как вы справляетесь с этими повторяющимися проблемами в коде?
We cannot use this since our csv contains Header Columns in the first line & we want to skip first line.
Вот для чего нужен COPY ... WITH HEADER.
Specifies that the file contains a header line with the names of each column in the file. On output, the first line contains the column names from the table, and on input, the first line is ignored. This option is allowed only when using CSV format.
Большое спасибо за ваш ответ a_horse_with_no_name. На данный момент проблема решена, но это определенно будет для меня уроком.