Pokud si můžete dovolit přepsat celou tabulku, je to pravděpodobně nejjednodušší přístup:
WITH Deleted AS (
DELETE FROM discogs.releases_labels
RETURNING *
)
INSERT INTO discogs.releases_labels
SELECT DISTINCT * FROM Deleted
Pokud potřebujete konkrétně zacílit na duplicitní záznamy, můžete použít interní ctid
pole, které jednoznačně identifikuje řádek:
DELETE FROM discogs.releases_labels
WHERE ctid NOT IN (
SELECT MIN(ctid)
FROM discogs.releases_labels
GROUP BY label, release_id, catno
)
Buďte velmi opatrní s ctid
; mění se v čase. Ale můžete se spolehnout na to, že to zůstane stejné v rámci jediného prohlášení.