如何停止导入csv数据?

时间:2014-08-31 16:21:32

标签: postgresql

如何在导入最后一行时告诉postgres停止导入数据?

我使用非null约束定义了我的主键。我的行在1452结束。我收到错误:

     ERROR:  null value in column "coachiid" violates not-null constraint
     DETAIL:  Failing row contains (null, null, null, null, null, null, null, null, null, null, null).
     CONTEXT:  COPY coaches, line 1453: ";;;;;;;;;;"

由于显而易见的原因,postgres认为它违反了保守党。但是我的开放式办公室csv表就在那里结束了。是否有诀窍或方式表明?

我认为它更像是一个OpenOffice问题,而不是postgres。也许有人有类似的经历。

1 个答案:

答案 0 :(得分:0)

PostgreSQL copy命令无法处理约束违规。

你是对的,我认为在导入数据之前考虑OpenOffice的问题和处理文件会更好。或者使用临时表。

但是,如果你喜欢,如果我们可以将最后一行标识为一行并将所有字段设置为null,则可以通过触发器忽略最后一行:

CREATE OR REPLACE FUNCTION cancel_if_empty_row()
  RETURNS trigger AS
$BODY$begin

if tg_op='INSERT' and new.coachiid is  null and new.field2 is null and new.field3 null and new.field4 is null then
return null;
end if;

return new;

end;$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;


CREATE TRIGGER trigger_cancel_if_empty_row
  BEFORE INSERT
  ON my_table
  FOR EACH ROW
  EXECUTE PROCEDURE cancel_if_empty_row();

WIKI: COPY command

COPY command