Om du har råd att skriva om hela tabellen är detta förmodligen den enklaste metoden:
WITH Deleted AS (
DELETE FROM discogs.releases_labels
RETURNING *
)
INSERT INTO discogs.releases_labels
SELECT DISTINCT * FROM Deleted
Om du behöver rikta in dig specifikt på de dubblerade posterna kan du använda den interna ctid
fält, som unikt identifierar en rad:
DELETE FROM discogs.releases_labels
WHERE ctid NOT IN (
SELECT MIN(ctid)
FROM discogs.releases_labels
GROUP BY label, release_id, catno
)
Var mycket försiktig med ctid
; det förändras med tiden. Men du kan lita på att den förblir densamma inom ramen för ett enda uttalande.