PostgreSQL удаление дубликатов данных
Для удаления будем использовать системную колонку ctid, которая поможет в идентификации одинаковых значений в таблице.
Для примера создадим таблицу example.
# create table example(val int);
Добавим одинаковых значений
# insert into example values (10), (1), (1), (20), (10);
INSERT 0 5
Выборка с использованием ctid.
# select ctid, * from example;
ctid | val
-------+-----
(0,1) | 10
(0,2) | 1
(0,3) | 1
(0,4) | 20
(0,5) | 10
(5 rows)
Удаляем дубликаты с помощью подзапроса, который определяет наименьшее ctid для значения val.
delete from example where ctid in (select min(ctid) from example group by val having count(*) > 1);
# select ctid, * from example;
ctid | val
-------+-----
(0,3) | 1
(0,4) | 20
(0,5) | 10
(3 rows)