Операторы postgresql и Delete нарушают ограничение внешнего ключа - PullRequest
4 голосов
/ 05 февраля 2012

У меня проблема с оператором delete.

У меня есть две таблицы:

table vehicule_loan(
    vehicule TEXT NOT NULL UNIQUE,
);

table vehicule_uid (
    id UUID NOT NULL DEFAULT uuid_generate_v4(),
    vehicule TEXT NOT NULL REFERENCES vehicule_loan(vehicule) ON DELETE NO ACTION
);

Когда я удаляю vehicule из таблицы vehicule_loan Я хочу, чтобы ссылки на строкив таблице vehicule_uid хранятся.

Но когда я пытаюсь удалить один, я получаю эту ошибку:

ERROR:  update or delete on table "vehicule_loan" violates foreign key constraint "vehicule_uid_vehicule_fkey" on table "vehicule_uid"

Мне кажется, я понимаю ошибку: после удаления vehiculeиз таблицы vehicule_loan, vehicule в vehicule_uid будет указывать на ничто.

Но есть ли способ сохранить строки в vehicule_uid?

1 Ответ

5 голосов
/ 05 февраля 2012

Вы должны разрешить значения NULL в атрибуте внешнего ключа и определить ограничение внешнего ключа как ON DELETE SET NULL.

Цитирую главу 5.3. Ограничения из руководства PostgreSQL :

Есть два других варианта: SET NULL и SET DEFAULT. Это вызывает ссылки на столбцы, которые будут установлены в нулевые значения или значения по умолчанию, соответственно, когда указанная строка удаляется.

Может выглядеть так:

table vehicule_uid (
    id uuid NOT NULL DEFAULT uuid_generate_v4(),
    vehicule text REFERENCES vehicule_loan(vehicule) ON DELETE SET NULL
);

С этим параметром при удалении строки в vehicule_loan все ссылки на строки в vehicule_uid остаются в базе данных.

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