从CSV更新/插入表格

时间:2014-05-03 08:37:31

标签: postgresql

例如,我需要将mytbl导出为csv

    CREATE TABLE public.mytbl
(
   id integer, 
   product character varying(20), 
   patent character varying(50)
) 
WITH (
  OIDS = FALSE
)
;

我使用以下查询将mytbl导出到csv

copy(select * from mytbl) to 'D:\mytbl.csv' with csv header 

并使用COPY mytbl FROM 'D:\mytbl.csv' CSV HEADER这将从csv

插入

但我需要先删除mytbl中的现有数据,然后再从mytbl.csv导入, 当我删除错误时

ERROR:  update or delete on table "mytbl" violates foreign key constraint "mytblX_forinkey_productid" on table "mytblX"

如何克服这个?

PostgreSQL 9.2

2 个答案:

答案 0 :(得分:0)

看来你的mytblX对mytbl有一个FK。在你放弃你的mytbl之前,你应该ALTER TABLE mytblX DROP CONSTRAINT mytblX_forinkey_productid。然后,您可以将数据复制回来并发出ALTER TABLE mytblX ADD your_table_constraint

请注意,FK约束基于索引,因此您应该在重新创建FK约束之前为新复制的数据创建适当的索引。另请注意,新数据可能不符合mytblX数据设置的要求;即,如果它引用了您复制到数据库中的数据中没有的productid,那么您将遇到需要首先解决的问题(通常是手动和繁琐)。

答案 1 :(得分:0)

您可以将约束设置为可延迟,然后将其推迟。这将允许您删除原始表的内容,并在单个事务中从文件重新加载它。但是如果文件不包含满足约束条件的所有行,那么您将在COMMIT上收到错误。

相关问题