Обновите все ключи, чтобы они указывали на новый ключ - PullRequest
0 голосов
/ 22 мая 2018

Допустим, у меня есть таблица идентификаторов, которые представляют собой сериализуемый первичный ключ с ненулевым значением, и у меня есть ... скажем, 500 таблиц со столбцами с ограничениями fkey, связывающими их с идентификаторами.

Я понимаю, что кто-то ввел неправильную запись (скажем, запись № 10001) в первичной таблице идентификаторов.Они также ввели 500 строк в 500 таблиц, все они указывают на # 10001.Они должны указывать на # 10000, так как # 10000 уже существует.Поэтому мне нужно перейти к каждой fkey, которая ссылается на этот идентификатор, и изменить # 10001 на # 10000, чтобы я мог удалить # 10001, не удаляя записи, предназначенные для # 10000.

Существует ли быстрый и безопасный способсделать это?Я знаю, что не могу удалить идентификатор, пока все fkeys, указывающие на него, не будут удалены, или они не станут осиротевшими (и я думаю, что PGSQL в любом случае отклонит его из-за нарушения ограничений).

Я не могу вручнуюделайте это каждый раз, когда возникают ошибки ... достаточно часто, и нужно пройти через сотни таблиц.

Я пытаюсь выяснить, могу ли я перебрать все ограничения fkey в таблице information_schema.table_constraints, но есть ... плохое название для фэйки.Я надеюсь, что мне не нужно вручную создавать последовательно именованные fkeys, потому что это включает в себя прохождение и переименование всех ограничений fkey.Однако я могу при необходимости - есть ли способ программно перебрать все существующие ограничения fkey и проверить, на что они ссылаются, чтобы узнать, нужно ли учитывать эту ссылку для обновления?

Спасибоза любой совет, который вы можете предоставить!

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