Трудно сказать, что такое «лучший» или «наиболее подходящий» подход, поскольку вы не описали, что вы ищете в решении. Например, должны ли таблицы быть доступны для запроса при переходе на новые идентификаторы? Они должны быть доступны для одновременной модификации? Важно ли завершить миграцию как можно быстрее? Важно ли минимизировать пространство, используемое для миграции?
Сказав это, я бы предпочел # 1, а не ваши другие идеи, если они все отвечали вашим требованиям.
Все, что связано с триггером для обновления дочерних таблиц, кажется подверженным ошибкам и слишком сложным и, вероятно, не будет работать так же хорошо, как # 1.
Можно ли предположить, что новые идентификаторы никогда не будут конфликтовать со старыми идентификаторами? Если нет, решениям, основанным на обновлении идентификаторов по одному, придется беспокоиться о коллизиях - это может привести к путанице.
Рассматривали ли вы возможность использования CREATE TABLE AS SELECT
(CTAS) для заполнения новых таблиц новыми идентификаторами? Вы будете делать копию существующих таблиц, и для этого потребуется дополнительное пространство, однако, скорее всего, это будет быстрее, чем обновление существующих таблиц на месте. Идея состоит в том, чтобы: (i) использовать CTAS для создания новых таблиц с новыми идентификаторами вместо старых, (ii) создавать индексы и ограничения в зависимости от обстоятельств для новых таблиц, (iii) удалять старые таблицы, (iv) переименовывать новые таблицы со старыми именами.