2016-10-20 2 views
0

Скажите, у меня есть таблица: работодатели и: сотрудник. И я хотел бы добавить следующее:добавить ограничение уникальности, когда есть уже повторяющиеся старые записи

ALTER TABLE employers ADD UNIQUE (employee_id); 

Это работало хорошо в развитии, но так как уже есть дублировать записи в производстве, он не работает в производстве.

Есть ли способ добавить порядковый номер ограничения единственности, т. Е. Наложить ограничение единственности только на новые записи?

+2

Вам нужно удалить дубликаты, прежде чем вы можете создать ограничение –

+1

Семантика вопроса неопределенны. Что произойдет, если новая запись будет конфликтовать с одной или несколькими старыми записями? – wildplasser

+0

Если новая запись конфликтует со старой записью, возникает ошибка уникальности. Я просто не хочу испортить существующие записи, которые могут иметь дубликаты. – LOCKLOCK

ответ

2

Создать частичный уникальный индекс

create unique index index_unique_employer_id on employers(employer_id) 
where employer_id > 10 

https://www.postgresql.org/docs/current/static/sql-createindex.html

+0

Обычно это плохая идея. Гораздо лучше исправить дублированные данные. Вы можете обнаружить, что есть код, вставляющий дубликаты, которые могут вызвать проблемы при производстве. Особенно, если несколько разных приложений/импорта вставляют данные, и каждый из них разработан по-разному. Вы можете обнаружить, что что-то делает вставку, а не обновление. Понимание того, что вызвало дубликаты, зная, что вы исправили причину, имеет решающее значение, потому что если это уникальное поле, тогда отчеты и экспорт также попадут в проблемы, если вы не исправите плохие данные, которые у вас есть в настоящее время. – HLGEM

+0

спасибо! нецелесообразно исправить дублированные данные, поскольку они действительны. Это больше похоже на изменение бизнес-логики, чем на плохие данные. Таким образом, будет ли подходящее решение для работодателя_> 10? – LOCKLOCK

Смежные вопросы