Hvis du har råd til at omskrive hele tabellen, er dette nok den enkleste fremgangsmåde:
WITH Deleted AS (
DELETE FROM discogs.releases_labels
RETURNING *
)
INSERT INTO discogs.releases_labels
SELECT DISTINCT * FROM Deleted
Hvis du har brug for at målrette specifikt mod de duplikerede poster, kan du gøre brug af den interne ctid
felt, som entydigt identificerer en række:
DELETE FROM discogs.releases_labels
WHERE ctid NOT IN (
SELECT MIN(ctid)
FROM discogs.releases_labels
GROUP BY label, release_id, catno
)
Vær meget forsigtig med ctid
; det ændrer sig over tid. Men du kan stole på, at den forbliver den samme inden for rammerne af en enkelt erklæring.