Как отловить уникальную ошибку ограничения в POSTGRESQL - PullRequest
0 голосов
/ 02 мая 2011

Если я создаю таблицу с уникальным ограничением, например:

CREATE TABLE distributors (
    did     integer,
    name    varchar(40) UNIQUE
); 

Что произойдет, если я попытаюсь ввести запись с именем, которое уже существует. Я попытался сделать это, и он просто вышел без отображения сообщения об ошибке. Есть ли способ проверить, была ли фактически добавлена ​​новая запись?

Ответы [ 2 ]

2 голосов
/ 02 мая 2011

Если вставка завершилась неудачно, чем-то должен быть где-то установлен код ошибки, читаемый некоторым методом интерфейса, который вы используете - более подробную информацию можно найти в документации к вашей библиотеке / модулю доступа.измените свою вставку на:

INSERT INTO distributors (did, name) values ( ... ) RETURNING did;

И если она ничего не вернула - произошла ошибка.

0 голосов
/ 02 мая 2011

Если вы попытаетесь вставить запись с именем, которое уже существует, вы получите сообщение об ошибке, подобное этому:

ERROR:  duplicate key value violates unique constraint "distributors_name_key"
DETAIL:  Key (name)=(aaa) already exists.

и запись не будет вставлена.
Если вы делаете это с уровня allplcation, исключение будет выдано с сообщением, похожим на это. Программист должен справиться с этим исключением.

Если ваше поле идентификатора генерируется автоматически (SERIAL или BIGSERIAL), и вы вставляете просто имя, если вы вставляете имя, которое уже существует, последовательность ID увеличится на 1, даже если вы не вставляли какую-либо запись.

Чтобы избежать проверки "SELECT" перед проверкой INSERT, запись уже существует. Можно сделать все за одну транзакцию, в псевдокоде:

* * 1010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...