#database #postgresql #csv-import
#База данных #postgresql #csv-импорт
Вопрос:
У меня есть CSV-файл, который довольно большой (несколько сотен мегабайт), который я пытаюсь импортировать в таблицу Postgres, проблема возникает, когда происходит некоторое нарушение первичного ключа (дубликат записи в CSV-файле)
Если бы это был один, я мог бы вручную отфильтровать эти записи, но эти файлы генерируются программой, которая генерирует такие данные каждый час. Мой скрипт должен автоматически импортировать его в базу данных.
Мой вопрос: Есть ли какой-нибудь выход, чтобы я мог установить флаг в команде КОПИРОВАНИЯ или в Postgres, чтобы он мог пропускать повторяющиеся записи и продолжать импортировать файл в таблицу?
Ответ №1:
Я думал бы подойти к этому двумя способами:
- Используйте утилиту, которая может помочь создать «отчет об исключениях» из повторяющихся строк, таких как эта, в процессе КОПИРОВАНИЯ.
- Измените свой рабочий процесс, сначала загрузив данные во временную таблицу, проверив ее на наличие дубликатов (возможно, ОБЪЕДИНИТЕ с вашей целевой таблицей и пометьте все существующие во временной таблице флагом dup), а затем импортируйте только отсутствующие записи и отправьте дубликаты в таблицу исключений.
Я лично предпочитаю второй подход, но в вашем случае это зависит от конкретного рабочего процесса.
Комментарии:
1. Я бы также выбрал второе решение (или использовал другой инструмент для загрузки данных)
2. Я бы выбрал второе решение
3. Я попробовал второй подход @dawebber, но по мере увеличения размера базы данных при импорте дальнейший импорт задерживается, а время импорта увеличивается по мере роста таблицы.
4. @regexhacks, в какой части рабочего процесса наблюдается замедление?