Pgloader + Postgres: импорт всех хороших строк из файла CSV, пропуск и регистрация плохих строк
Я создаю командный файл pgloader для импорта набора файлов CSV, предоставленных другой командой, в таблицу в базе данных Postgres. Загрузка правильно сформированных файлов работает нормально, но мы должны планировать, чтобы наши входные файлы были плохо отформатированы. В идеале я хотел бы пропустить и записать все плохие строки в мои входные файлы; в документации сказано:
Чтобы разрешить повторную попытку данных и загрузку хороших деталей, используйте параметр возобновления ошибки далее, который по умолчанию используется для загрузки данных на основе файлов (например, CSV, IXF или DBF).
но я не совсем могу заставить его работать.
Это мой командный файл:
LOAD CSV
FROM
ALL FILENAMES MATCHING ~/{{{FILE_REGEXP}}}/
IN DIRECTORY '{{STAGING_PATH}}'
WITH ENCODING UTF8
INTO postgresql://{{PGUSER}}:{{PGPASSWORD}}@{{PGHOST}}/{{PGDATABASE}}
TARGET TABLE {{TABLE_NAME}}
WITH
csv header,
on error resume next,
fields terminated by '|',
truncate
;
У меня есть несколько файлов, в которые я специально вставил ошибки для тестирования. Вот часть первого:
"id"|"code"|"first_name"|"first_name_1"|"last_name"
"jba9ltm3rk58e9bg"|"O1smr83CmvMkqnrV"|"Adam"|"Ant"
"wew6tiq5zmkak19y","I4hlQYrcCSlN3KnV"|Barbara|"Barb"|Bell
"mtsunn0i0ac2t30o"|"vePl6Nti7q1s9YeI"|"Carl"|"Chip"|"Cook"
И часть вторая:
"id"|"code"|"first_name"|"first_name_1"|"last_name"
"zcwoyy9e2yiuvan3"|"KNK59muKY5AcfQsd"|"Edward"|""|"Ember"
"fvdagry1jbbgtv63","bJnYxUUHo1R3rlYK","Faith","Faith","Flint"
"k606tkzte4t8mjv2"|"qskHKqVvwbPRE0xY"|"Gareth"|"George"|"Gatsby"
То, что я хотел бы получить, это импортировать все хорошие строки и пропустить и записать все плохие строки. Но я получаю при первой ошибке pgloader
прекращает обработку текущего файла и переходит к следующему. Это происходит независимо от того, использую ли я on error resume next
или же on error stop
, Например, я никогда не вижу Карла Кука и Гарета Гэтсби в моей базе данных.
Документация говорит это о регистрации плохих строк:
В конце загрузки, содержащей отклоненные строки, вы найдете два файла в корневом каталоге, в каталоге с именем, совпадающим с целевой базой данных вашей установки. Имена файлов являются целевой таблицей, а их расширения:.dat для отклоненных данных и.log для файла, содержащего полные журналы на стороне клиента PostgreSQL об отклоненных данных.
В моем случае Pgloader создает каталог с именем моей целевой таблицы в выходном каталоге, но в нем ничего нет, хотя в моих входных файлах явно есть отклоненные строки.
Я также попытался добавить batch rows = 1
в надежде pgloader перейдет к следующему пакету одной строки, но в выходных данных не было никаких изменений.
Я, вероятно, делаю что-то не так. Что я могу проверить?