如果您有能力重写整个表,则这可能是最简单的方法:
WITH Deleted AS ( DELETE FROM discogs.releases_labels RETURNING *)INSERT INTO discogs.releases_labelsSELECt DISTINCT * FROM Deleted
如果您需要专门针对重复的记录,则可以使用内部
ctid字段,该字段唯一地标识一行:
DELETE FROM discogs.releases_labelsWHERe ctid NOT IN ( SELECt MIN(ctid) FROM discogs.releases_labels GROUP BY label, release_id, catno)
要非常小心
ctid; 它会随着时间而变化。但是您可以依靠它在单个语句的范围内保持不变。



