Как реализовать миграцию схемы для базы данных PostgreSQL - PullRequest
0 голосов
/ 25 января 2020

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

Например, в первой версии я создал несколько таблиц, затем во второй версии я переименовал некоторые столбцы, а в третьей версии я удалил одну таблицу и создал другую. У меня есть несколько серверов, и на некоторых из них у меня есть версия один на какой-то версии три и т. Д. c.

Моя идея:

  • Создать га sh для вывода, произведенного

pg_dump --schema-only

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

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

Не могли бы вы указать какие-либо слабые стороны этого подхода?

1 Ответ

1 голос
/ 25 января 2020

Вы когда-нибудь слышали о https://pgmodeler.io? В компании, где я работаю, мы решили go для этого, поскольку она может выполнять различие схемы даже между локальным и удаленным. Мы очень довольны этим.

В противном случае, если вы предпочитаете бесплатное решение, вы можете разработать инструмент миграции, который можно использовать для применения миграций, которые вы храните в одном репо. Кроме того, этот инструмент может опираться на таблицу migration, которую вы храните в отдельной схеме, чтобы ваши БД всегда знали, какие миграции были применены или нет.

Прелесть этого подхода в том, что миграции могут быть об изменении схемы и данных.

Я надеюсь, что это может дать вам некоторые идеи.

...