Если первичного ключа нет, хитрость для распознавания повторяющихся строк заключается в использовании ctid
, псевдостолбца, который определяет (недолговечное) физическое расположение строки.Две строки не могут иметь одинаковые ctid
, и ctid
можно сравнивать друг с другом.
В следующем запросе добавлено условие, позволяющее различать удаляемые строки по отношению к той, которую нужно сохранить, для каждого дубликата.
DELETE from test del
WHERE EXISTS (
SELECT *
FROM test ex
WHERE ex.name= del.name
AND ex.ctid > del.ctid
);