Прочитайте сообщение об ошибке еще раз:
Ошибка SQL: ОШИБКА: не удалось создать уникальный индекс "service_import_checksum_key" ДЕТАЛИ: Ключ ( контрольная сумма ) = () isдубликаты .
Похоже, это говорит о том, что в столбце checksum
есть повторяющиеся значения, и вы пытаетесь обеспечить уникальность этого столбца с вашим ограничением.Ограничение не дублируется, данные имеют дубликаты.
Кроме того, часть "()" указывает на наличие нескольких пустых строк в столбце checksum
.Уникальные ограничения допускают множественные значения NULL
(поскольку NULL = NULL
- это NULL
, что не соответствует действительности), но пустые строки - не NULL
.
Пример, поясняющий, что происходит:
=> CREATE TABLE x (s VARCHAR NULL);
CREATE TABLE
=> INSERT INTO x (s) VALUES (''), ('a'), ('');
INSERT 0 3
=> ALTER TABLE x ADD CONSTRAINT ux UNIQUE(s);
NOTICE: ALTER TABLE / ADD UNIQUE will create implicit index "ux" for table "x"
ERROR: could not create unique index "ux"
DETAIL: Key (s)=() is duplicated.
=> delete from x where s='';
DELETE 2
=> INSERT INTO x (s) VALUES ('a');
INSERT 0 1
=> ALTER TABLE x ADD CONSTRAINT ux UNIQUE(s);
NOTICE: ALTER TABLE / ADD UNIQUE will create implicit index "ux" for table "x"
ERROR: could not create unique index "ux"
DETAIL: Key (s)=(a) is duplicated.
В частности, обратите внимание на то, что говорят ERROR и DETAIL , и сравните это с INSERT.