Als je het je kunt veroorloven om de hele tabel te herschrijven, is dit waarschijnlijk de eenvoudigste aanpak:
WITH Deleted AS (
DELETE FROM discogs.releases_labels
RETURNING *
)
INSERT INTO discogs.releases_labels
SELECT DISTINCT * FROM Deleted
Als u de dubbele records specifiek wilt targeten, kunt u gebruik maken van de interne ctid
veld, dat een rij uniek identificeert:
DELETE FROM discogs.releases_labels
WHERE ctid NOT IN (
SELECT MIN(ctid)
FROM discogs.releases_labels
GROUP BY label, release_id, catno
)
Wees heel voorzichtig met ctid
; het verandert in de loop van de tijd. Maar u kunt erop vertrouwen dat het binnen het bereik van een enkele verklaring hetzelfde blijft.