如何在导入最后一行时告诉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。也许有人有类似的经历。
答案 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();