0

全部,

我正在尝试使用 COPY TO 命令在表中批量插入一些数据,但我似乎无法解决唯一键错误。这是我的工作流程。

创建我要移动到另一台服务器的数据的转储

COPY (
  SELECT *
  FROM mytable
  WHERE created_at >= '2012-10-01')
    TO 'D:\tmp\file.txt'

在目标数据库中创建一个新的“临时”表,然后像这样复制数据。

COPY temp FROM 'D:\tmp\file.txt'

我现在想将数据从“临时”表移动到目标 DBlike 中的主表中。

 INSERT INTO master SELECT * FROM temp 
                WHERE id NOT IN (SELECT id FROM master)

这运行正常,但没有插入任何内容,也没有更新任何字段。有谁知道这里可能发生了什么?temp 和 master 的架构是相同的。在这个问题上的任何帮助都会很棒!我正在使用 Postgresql 9.2

亚当

4

1 回答 1

1

如果列表中有null值,就会发生这种情况IN

在 SQL 中,null进行比较时总是存在 a false(您需要特殊IN NULL测试才能获得匹配)。如果有任何nullSELECT id FROM master.

查看此查询是否返回任何行:

SELECT id
FROM master
WHERE id is null;

如果不是,那么这不是你的问题。

如果有值,则修复方法是null从列表中排除 id:

INSERT INTO master
SELECT *
FROM temp 
WHERE id NOT IN (SELECT id FROM master where id is not null)


另一件要考虑的事情是,根本就没有尚未插入的值!

于 2012-10-31T23:29:04.663 回答