例如,我需要将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
答案 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
上收到错误。