Могу ли я указать поведение ON DELETE в PostgreSQL для каждого запроса? - PullRequest
0 голосов
/ 24 декабря 2018

Допустим, у меня есть таблица Albums и таблица Tracks.У дорожек есть столбец album, который является внешним ключом к таблице Album, но это поле может быть пустым.Тем не менее, когда я пытаюсь удалить альбом, я получаю ошибку целостности:

Key (id)=(123) is still referenced from table "Track".

Я хотел бы вызвать поведение ON DELETE SET NULL только один раз.Возможно ли это?

1 Ответ

0 голосов
/ 24 декабря 2018

Это потому, что вы установили ограничение внешнего ключа для выдачи ошибки вместо выполнения каскадного удаления или установки на ноль.У вас есть два варианта:

  1. Выполните ALTER TABLE до и после запроса DELETE, чтобы изменить ограничение.Убедитесь, что ваш DELETE обернут в структуру обработки ошибок (используя любой эквивалент PostgreSQL, равный finally), чтобы ограничение вернулось к исходному поведению, даже если ваш код вызывает ошибку.

  2. Измените ваш запрос на UPDATE -then- DELETE.Вероятно, это наиболее разумный подход, чем изменение ограничений:

    UPDATE Tracks SET AlbumId = NULL WHERE AlbumId = 123
    
    DELETE FROM Albums WHERE AlbumId = 123
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...