Рефакторинг идентификаторов автоинкремента в GUID в ** БД SQL
Джефф и другие убедили меня, что идентификаторы GUID предпочтительнее идентификаторов автоинкремента. У меня есть БД Postgres, которая индексируется с помощью идентификаторов автоинкремента, поэтому я хотел бы "перестроить" индексы в UUID. Есть ли какой-то общий (или специфический) подход к этому, кроме написания функций, которые пересекают таблицы и проверяют совпадения индексов по таблицам?
Обновить
- Примечание: база данных в данный момент не работает, поэтому производительность и целостность транзакций не являются проблемой.
1 ответ
Я не могу найти ничего, что будет делать это автоматически для вас, так что, похоже, это зависит от вас. Хорошо, что миру все еще нужны разработчики баз данных, а?
Пожалуй, лучший способ - записать все изменения в сценарий. Вероятно, лучший способ создать этот сценарий - использовать другой сценарий или инструмент (код, который пишет код), который, по-видимому, недоступен для этого конкретного сценария. Конечно, каждый из них добавляет еще один уровень программного обеспечения, который должен быть сконструирован и протестирован. Если бы я думал, что захочу повторить этот процесс какое-то время, или мне нужен какой-то уровень контрольного журнала (например, сценарии изменения), я бы, вероятно, откусил пулю и написал скрипт, который пишет этот сценарий.
Если это действительно одноразовая сделка, и вы можете запретить доступ к БД во время ее выполнения, тогда это может сэкономить время и усилия, чтобы просто внести изменения вручную, как при первоначальной разработке базы данных. Под этим я подразумеваю добавление столбцов UUID с помощью предпочитаемого вами метода (диаграмма, SQL DDL и т. Д.), Заполнение их данными (возможно, специальным SQL DML), установка ключей и ограничений, а затем в конечном итоге удаление старых внешних ключей и столбцы (опять же, используя любой метод, который вам нравится).
Если у вас несколько сред (dev, test, prod), вы можете сделать это в dev, а затем использовать инструмент сравнения БД для создания сценариев изменений, хотя вам понадобятся новые значения FK в сценарии.
Пример
Вот пример рабочего скрипта на SQL Fiddle, хотя он и на SQL Server (моя самая легкая БД), просто чтобы дать вам представление о том, что вам придется писать (к сожалению, не как). Это все еще не полностью транзакционно согласовано, так как кто-то может что-то изменить во время одной конкретной операции.
Я понимаю, что это ни в коем случае не полный ответ, поэтому не стесняйтесь голосовать за меня (и предоставить лучший ответ).
Удачи, это действительно забавная проблема.