Ако можете да си позволите да пренапишете цялата таблица, това вероятно е най-простият подход:
WITH Deleted AS (
DELETE FROM discogs.releases_labels
RETURNING *
)
INSERT INTO discogs.releases_labels
SELECT DISTINCT * FROM Deleted
Ако трябва конкретно да се насочите към дублираните записи, можете да използвате вътрешния ctid
поле, което уникално идентифицира ред:
DELETE FROM discogs.releases_labels
WHERE ctid NOT IN (
SELECT MIN(ctid)
FROM discogs.releases_labels
GROUP BY label, release_id, catno
)
Бъдете много внимателни с ctid
; променя се с времето. Но можете да разчитате, че той ще остане същият в обхвата на едно изявление.