我试图在删除重复条目的同时将数据从一个 PostgreSQL 9.3 表插入到另一个表。
我有两个包含电子邮件地址的表。
主表包含电子邮件和每个电子邮件地址的标签。组合(email, tag)
必须是唯一的,为此有一个限制Unique(email, tag)
。
第二个表是从仅包含电子邮件地址的文本文件中动态创建的。那里有很多重复。
我需要将临时表中的数据导入主表而不破坏上述约束。对于包含电子邮件地址的特定文件,标签是恒定的。
表结构:
CREATE TABLE emails (
email character varying(128),
tag bigint,
CONSTRAINT "unique-tag-email" UNIQUE (email, tag) )
Run Code Online (Sandbox Code Playgroud)
和
CREATE TABLE emails_temp (email character varying(128)
Run Code Online (Sandbox Code Playgroud)
这是我的查询:
insert into emails(tag,email)
select
655,t.email
from
emails_temp as t
where
not exists ( select email from emails where email = t.email )
Run Code Online (Sandbox Code Playgroud)
注意:655 只是某组电子邮件地址的标记。
这是我得到的错误:
错误:重复键值违反唯一约束“唯一标签电子邮件”SQL 状态:23505 详细信息:密钥(电子邮件,标签)=(user@hotmail.com,655)已经存在。
文件中确实有两个电子邮件地址 user@hotmail.com。
废话不多说,因为这个错误,主表(email)里什么都没有添加。
我究竟做错了什么?