Миграция в Rails ActiveRecord для добавления внешнего ключа с параметром NOT VALID - PullRequest
0 голосов
/ 10 июня 2019

Может ли add_foreign_key добавить параметр NOT VALID в команду ALTER TABLE?(Postgres, если это имеет значение)

У меня есть внешний ключ между двумя очень большими таблицами.Мне нужно добавить CASCADE DELETE к ключу.Кажется, Postgres не поддерживает добавление каскада к существующему внешнему ключу.Решение - сбросить ключ и добавить новый с каскадом.

Достаточно просто ... за исключением того, что проверка ограничения занимает ДОЛГОЕ время.Я не уверен насчет блокировки во время этой проверки, но на самом деле, я просто хочу пропустить это.Данные действительны до того, как я откажусь от ограничения ... они будут действительны через мгновение.

Postgres поддерживает это с ALTER TABLE ADD CONSTRAINT ... NOT VALID.(Что означает «пропустить проверку», даже если звучит так, будто вы говорите, что она недействительна.)

1 Ответ

0 голосов
/ 10 июня 2019

RTFM: ActiveRecord :: ConnectionAdapters :: SchemaStatements # add_foreign_key

: Validate

(только Postgres) Укажите, следует ли проверять ограничение. По умолчанию true.

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

remove_foreign_key :address, column: :user_id
add_foreign_key :address, :user_id, :users, on_delete: :cascade, validate: false

Первоначально я искал этот ответ с помощью add_foreign_key "NOT VALID", для которого я не получил никаких полезных обращений в документах, StackOverflow и т. Д. Надеюсь, этот вопрос и ответ помогут мне снова найти этот ответ в следующий раз, когда он мне понадобится.

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