जब मैं 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 बाधा जोड़ता हूं। लेकिन जब मैं दूरी तालिका की जांच करता हूं, तो इसमें रिकॉर्ड नहीं होता है:

select * from public.book where name like '%三銃%';

कैसे ठीक करें? यह मेरा सम्मिलित एसक्यूएल है:

insert into public.book
select *
from public.book_backup20190405 legacy
where legacy."name" not in
(
    select name
    from public.book
)
limit 1000
1
Dolphin 7 अप्रैल 2019, 16:28

1 उत्तर

सबसे बढ़िया उत्तर

एक शिक्षित अनुमान, स्रोत तालिका में एक से अधिक पंक्तियाँ हो सकती हैं book_backup20190405 जिसमें अद्वितीय कुंजी टपल ('三銃', '', '') है।

चूंकि थोक INSERT INTO ... SELECT ... लेन-देन वाला होगा, आप त्रुटि के प्रति समझदार नहीं होंगे, क्योंकि बाधा विफल होने पर सभी डेटा वापस ले लिया जाएगा।

आप स्रोत तालिका पर एक डुप्ली चेक चलाकर इसे सत्यापित कर सकते हैं:

SELECT name, isbn, isbn10, COUNT(*) 
FROM public.book_backup20190405 
WHERE name = '三銃' 
GROUP BY name, isbn, isbn10 
HAVING COUNT(*) > 1;

यह देखने के लिए कि क्या डुप्लिकेट हैं।

यहां एक उदाहरण दिया गया है कि कैसे स्रोत तालिका डुप्लिकेट का एकमात्र स्रोत हो सकती है:

http://sqlfiddle.com/#!17/29ba3

2
StuartLC 7 अप्रैल 2019, 14:19