我有一堆postgresql數據庫中的數據。我認爲兩個密鑰應該形成一個唯一的對, 所以想要在數據庫中執行該密鑰。我嘗試重複的多列條目postgresql
create unique index key1_key2_idx on table(key1,key2)
但是,失敗,告訴我,我有重複的條目。
如何找到這些重複條目,以便我可以刪除它們?
我有一堆postgresql數據庫中的數據。我認爲兩個密鑰應該形成一個唯一的對, 所以想要在數據庫中執行該密鑰。我嘗試重複的多列條目postgresql
create unique index key1_key2_idx on table(key1,key2)
但是,失敗,告訴我,我有重複的條目。
如何找到這些重複條目,以便我可以刪除它們?
假設你只想要刪除的重複和保持原來的,公認的答案是不正確的 - 它同樣會刪除您的原件,並且只保留從一開始就有一個條目的記錄。這部作品的9.x:
SELECT * FROM tblname WHERE ctid IN
(SELECT ctid FROM
(SELECT ctid, ROW_NUMBER() OVER
(partition BY col1, col2, col3 ORDER BY ctid) AS rnum
FROM tblname) t
WHERE t.rnum > 1);
select key1,key2,count(*)
from table
group by key1,key2
having count(*) > 1
order by 3 desc;
確定重複項的查詢的關鍵部分是having count(*) > 1
。
還有一大堆在以下鏈接巧妙的技巧,包括刪除重複的一些例子:http://postgres.cz/wiki/PostgreSQL_SQL_Tricks
要知道,有些對維基的信息是非常* *過時,但。當它說Pg中的某些行爲以某種方式行事或者你不能做某件事情時,請仔細檢查官方文檔。 –
我不明白這個答案是準確的。這會導致您丟棄原件 - 而不僅僅是dups。 IE瀏覽器,如果你有兩個相同列集的條目,這個選擇將匹配/放棄他們兩個 - 不僅是dups。當然,你會滿足約束 - 但你也只是失去了有效的數據(超過1副本的任何條目將完全丟失)。 – rocksfrow