Наконец, это было решено коллегой.
Давайте посмотрим, сколько там дуплексов:
SELECT COUNT(*) FROM _sample_table_delme_data_files ;
count
-------
12728
(1 row)
Теперь мы добавим еще один столбец в исходную таблицу, чтобы помочь нам дифференцироватьпохожие строки:
ALTER TABLE _sample_table_delme_data_files ADD COLUMN id2 serial;
Теперь мы можем увидеть дуплексы:
SELECT id, id2 FROM _sample_table_delme_data_files ORDER BY id LIMIT 10;
id | id2
--------+------
198748 | 6449
198748 | 85
198801 | 166
198801 | 6530
198829 | 87
198829 | 6451
198926 | 88
198926 | 6452
199062 | 6532
199062 | 168
(10 rows)
И удалить их:
DELETE FROM _sample_table_delme_data_files
WHERE id2 IN (SELECT max(id2) FROM _sample_table_delme_data_files
GROUP BY id
HAVING COUNT(*)>1);
Давайте посмотрим, как это работает:
SELECT id FROM _sample_table_delme_data_files GROUP BY id HAVING COUNT(*)>1;
id
----
(0 rows)
Удалить вспомогательный столбец:
ALTER TABLE _sample_table_delme_data_files DROP COLUMN id2;
ALTER TABLE
Вставить оставшиеся строки в таблицу назначения:
INSERT INTO data_files (SELECT * FROM _sample_table_delme_data_files);
INSERT 0 6364