Каскадное обновление всех внешних ключей без фактического изменения первичного ключа. - PullRequest
1 голос
/ 05 июля 2019

Мне нужно придумать, как люди могли бы пригласить существующего пользователя (который принадлежит организации A) в организацию B, а затем настроить и какие разрешения они будут иметь в организации B после того, как они примут приглашение. Разрешения реализованы в виде внешних ключей для идентификатора пользователя из различных таблиц.

Моя идея состоит в том, чтобы создать «прокси-пользователя» с другим идентификатором, и люди могут предоставлять разрешения прокси-пользователю. Затем, когда реальный пользователь принимает приглашение, я обновляю все внешние ключи от идентификатора прокси-пользователя до реального идентификатора пользователя.

Я бы хотел UPDATE "Users" SET id = :realUserId WHERE id = :proxyUserId, чтобы воспользоваться ON UPDATE CASCADE предложениями всех моих FOREIGN KEY ограничений. Но очевидно, что это вызовет конфликт первичного ключа, так как :realUserId уже существует.

Я не думаю, что есть какой-либо разумный способ заставить Postgres выполнять каскадные обновления всех таблиц с внешними ключами до Users, без обновления самого Users?

...