Pgloader + Postgres:从CSV文件导入所有好的行,跳过和记录坏行

时间:2018-10-25 08:16:33

标签: postgresql pgloader

我正在创建一个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,都会发生这种情况。例如,我从未在数据库中看到Carl Cook和Gareth Gatsby。

文档说明了有关记录不良行的信息:

  

在包含被拒绝的行的加载结束时,您将在root-dir位置的与设置的目标数据库相同的目录下找到两个文件。文件名是目标表,扩展名是.dat用于拒绝的数据,扩展名是.log用于包含有关拒绝的数据的完整PostgreSQL客户端日志的文件。

在我的情况下,Pgloader在输出目录中创建了一个以我的目标表命名的目录,但是其中没有任何内容,即使输入文件中显然存在被拒绝的行。

我还尝试添加batch rows = 1,希望pgloader可以移至下一行的下一行,但是输出没有变化。

我可能做错了什么。我可以检查什么?

0 个答案:

没有答案