0

我不小心对删除了 5000 多行的实时数据进行了查询。我在做这个之前做了一个备份,备份是这样的格式:

COPY table (id, "position", event) FROM stdin;
529 1   5283
648 1   6473
687 1   6853
\.

问题是,如果我运行它,我会得到:

ERROR:  duplicate key value violates unique constraint "table_pkey"

有没有办法改变这个查询只插入我删除的行?诸如“如果存在,请忽略”之类的东西?通常我知道这会影响很多事情,但是因为它实际上只是那些需要替换的条目,我认为这样的东西可以工作,但我不知道它是否存在?

4

2 回答 2

1

最简单的方法可能是创建原始表的副本并还原到该表。然后从原始表中不存在条目的副本插入原始表。例如

create table copy_table as select * from table where 1=2;
-- change the copy statement
COPY copy_table from stdin;
...

-- Insert to original
INSERT INTO table t1
SELECT ct.*
  FROM copy_table ct
       LEFT JOIN  table t2 ON t2.id = ct.id -- assuming id is primary key
 WHERE t2.id IS NULL;
于 2013-02-21T08:50:07.500 回答
0

COPY不,很遗憾,使用该命令是不可能的。

您需要将所有行插入到临时表中,然后用于insert into .. select ... where not exits (...)将缺少的行从临时表复制到真实表中。

于 2013-02-21T08:50:11.307 回答