Здесь две вещи, которые помогут решить вашу проблему:
Почему nro
равно serial
, если в вашей базе данных не является последовательным полем? Тип serial
используется, когда вы хотите, чтобы поле увеличивалось автоматически (как в первичных ключах с одним целым числом). Может быть, лучше указать здесь тип int
.
В вашей таблице нет уникальных ограничений. Если вы создадите скрипт, вы увидите, что код работает нормально:
CREATE TABLE proposta_de_correcao(
email VARCHAR(255) not null,
nro SERIAL not null,
UNIQUE(nro, email),
PRIMARY KEY(nro, email)
-- FOREIGN KEY (email) REFERENCES Utilizador(email)
);
INSERT INTO proposta_de_correcao VALUES ('user1@e.com', 1);
INSERT INTO proposta_de_correcao VALUES ('user1@e.com', 2);
INSERT INTO proposta_de_correcao VALUES ('user2@e.com', 1);
Итак, я могу сделать вывод, что когда вы хотите добавить ограничение, ваша база данных уже имеет дублированные данные в эти две колонки. Попробуйте создать в тестовой базе данных упомянутые выше данные, и вы увидите, что все работает отлично.
Я только что снял ограничение внешнего ключа, чтобы разрешить запуск кода, поскольку в примере у нас нет указанной таблицы, и мы можем считать, что указанная таблица не влияет на проблему, указанную в ответе.
Вот скрипка .