Рефакторинг идентификаторов автоинкремента в GUID в ** БД SQL

Джефф и другие убедили меня, что идентификаторы GUID предпочтительнее идентификаторов автоинкремента. У меня есть БД Postgres, которая индексируется с помощью идентификаторов автоинкремента, поэтому я хотел бы "перестроить" индексы в UUID. Есть ли какой-то общий (или специфический) подход к этому, кроме написания функций, которые пересекают таблицы и проверяют совпадения индексов по таблицам?

Обновить

  • Примечание: база данных в данный момент не работает, поэтому производительность и целостность транзакций не являются проблемой.

1 ответ

Решение

Я не могу найти ничего, что будет делать это автоматически для вас, так что, похоже, это зависит от вас. Хорошо, что миру все еще нужны разработчики баз данных, а?

Пожалуй, лучший способ - записать все изменения в сценарий. Вероятно, лучший способ создать этот сценарий - использовать другой сценарий или инструмент (код, который пишет код), который, по-видимому, недоступен для этого конкретного сценария. Конечно, каждый из них добавляет еще один уровень программного обеспечения, который должен быть сконструирован и протестирован. Если бы я думал, что захочу повторить этот процесс какое-то время, или мне нужен какой-то уровень контрольного журнала (например, сценарии изменения), я бы, вероятно, откусил пулю и написал скрипт, который пишет этот сценарий.

Если это действительно одноразовая сделка, и вы можете запретить доступ к БД во время ее выполнения, тогда это может сэкономить время и усилия, чтобы просто внести изменения вручную, как при первоначальной разработке базы данных. Под этим я подразумеваю добавление столбцов UUID с помощью предпочитаемого вами метода (диаграмма, SQL DDL и т. Д.), Заполнение их данными (возможно, специальным SQL DML), установка ключей и ограничений, а затем в конечном итоге удаление старых внешних ключей и столбцы (опять же, используя любой метод, который вам нравится).

Если у вас несколько сред (dev, test, prod), вы можете сделать это в dev, а затем использовать инструмент сравнения БД для создания сценариев изменений, хотя вам понадобятся новые значения FK в сценарии.

Пример

Вот пример рабочего скрипта на SQL Fiddle, хотя он и на SQL Server (моя самая легкая БД), просто чтобы дать вам представление о том, что вам придется писать (к сожалению, не как). Это все еще не полностью транзакционно согласовано, так как кто-то может что-то изменить во время одной конкретной операции.

Я понимаю, что это ни в коем случае не полный ответ, поэтому не стесняйтесь голосовать за меня (и предоставить лучший ответ).

Удачи, это действительно забавная проблема.

Другие вопросы по тегам