Поскольку вы
не должны заботиться о других столбцах, кроме имени и staff_id
Это может быть ваша процедура для очистки таблицы:
1.) Создайте временную таблицу из уникальных строк:
CREATE TEMP TABLE p_tmp AS
SELECT DISTINCT ON (name, staff_id)
name, staff_id, work_code, location
FROM person
ORDER BY name, staff_id, work_code, location;
Я произвольно выбираю "первую строку для (name, staff_id)
- минимум work_code
и соответствует location
.
2.) Пустая таблица:
TRUNCATE person;
3.) Повторно ВСТАВЬТЕ уникальные кортежи:
INSERT INTO person SELECT * FROM p_tmp;
Убедитесь, что дупс не поползает обратноДобавьте суррогатный первичный ключ:
ALTER TABLE person ADD COLUMN person_id serial PRIMARY KEY;
ALTER TABLE person ADD UNIQUE (name, staff_id);
или просто добавьте первичный ключ из нескольких столбцов:
ALTER TABLE person ADD PRIMARY KEY (name, staff_id);
В конце временная таблица будет удалена.сеанса автоматически.
Конечно, все это лучше всего делать в одной транзакции , поэтому вы ничего не потеряете в маловероятном случае, если столкнетесь с проблемой на полпути.Некоторые клиенты делают это автоматически для сразу нескольких операторов SQL.