Я считаю решение Вернера выше наиболее удобным, поскольку оно работает независимо от наличия первичного ключа, не связывается с таблицами, использует простой sql, ориентированный на будущее, очень понятно.
Как я уже говорил в своем комментарии, это решение не было должным образом объяснено.
Так что это мое, основываясь на этом.
1) добавить новый логический столбец
alter table mytable add tokeep boolean;
2) добавить ограничение на дублированные столбцы И новый столбец
alter table mytable add constraint preventdupe unique (mycol1, mycol2, tokeep);
3) установить для логического столбца значение true. Это будет выполнено только в одной из дублированных строк из-за нового ограничения
update ignore mytable set tokeep = true;
4) удалить строки, которые не были помечены как tokeep
delete from mytable where tokeep is null;
5) опустить добавленный столбец
alter table mytable drop tokeep;
Я предлагаю вам сохранить добавленное вами ограничение, чтобы в будущем исключались новые дубликаты.