我已經交給一個數據庫,處於一種奇怪的狀態。在過去的某個不確定的時間,我結束了在一個情況下,我不得不重複在同一個表中的行與相同的主鍵:LIMIT如何通過Postgres中的主鍵與DELETE進行交互? (修復損壞的唯一索引)
=> \d my_table
Table "public.my_table"
Column | Type | Modifiers
--------------------+-------------------------+-----------
id | bigint | not null
some_data | bigint |
a_string | character varying(1024) | not null
Indexes:
"my_table_pkey" PRIMARY KEY, btree (id)
=> SELECT id, count(*) FROM my_table GROUP BY id HAVING count(*) > 1 ORDER BY id;
#50-some results, non-consecutive rows.
我不知道數據庫如何進入這種狀態,但我希望能夠安全地擺脫它。如果,每個複製主鍵,如果我執行形式的查詢:
DELETE FROM my_table WHERE id = "a_duplicated_row" LIMIT 1;
是不是隻打算從表中刪除一個行呢,還是要與給定的主刪除兩行鍵?
據我所知,您輸入的SQL無效 - [PostgreSQL的DELETE語句手冊頁](http://www.postgresql.org/docs/current/interactive/sql-delete。 HTML)沒有提及「LIMIT」子句。所以當前問題的答案是「既不會,也會出錯」。在其他地方可以找到關於「如何刪除一對副本中的一行」的隱含問題的答案。 – IMSoP
問題的標題應該更像「如何解決已損壞的唯一索引」 –