为什么postgresql在密钥不存在时遇到重复密钥?
将数据插入Postgresql(9.6)时,抛出以下错误:为什么postgresql在密钥不存在时遇到重复密钥?,postgresql,Postgresql,将数据插入Postgresql(9.6)时,抛出以下错误: ERROR: duplicate key value violates unique constraint "book_intial_name_isbn_isbn10_key" DETAIL: Key (name, isbn, isbn10)=(三銃士, , ) already exists. SQL state: 23505 我在name、isbn、isbn10列上添加了uniq约束。但当我检查distination表时,它不包
ERROR: duplicate key value violates unique constraint "book_intial_name_isbn_isbn10_key"
DETAIL: Key (name, isbn, isbn10)=(三銃士, , ) already exists.
SQL state: 23505
我在name、isbn、isbn10
列上添加了uniq约束。但当我检查distination表时,它不包含以下记录:
select * from public.book where name like '%三銃%';
如何修复?这是我的插入sql:
insert into public.book
select *
from public.book_backup20190405 legacy
where legacy."name" not in
(
select name
from public.book
)
limit 1000
根据推测,源表
book_backup20190405
中可能有多行具有唯一键元组('三銃', '', '')代码>
由于批量插入到…选择…
将是事务性的,因此您不会对错误更清楚,因为当约束失败时,所有数据都将回滚
您可以通过在源表上运行重复检查来验证这一点:
SELECT name, isbn, isbn10, COUNT(*)
FROM public.book_backup20190405
WHERE name = '三銃'
GROUP BY name, isbn, isbn10
HAVING COUNT(*) > 1;
看看是否有重复的
下面是一个示例,说明源表如何成为重复项的唯一来源:
可能存在的副本