pgroll -это инструмент командной строки с открытым исходным кодом, который предлагает безопасные и обратимые миграции схемы для PostgreSQL, одновременно обслуживая несколько версий схемы. Он заботится о сложных операциях миграции, чтобы гарантировать, что клиентские приложения продолжают работать, пока обновляется схема базы данных. Это включает в себя обеспечение применения изменений без блокировки базы данных, и что как старые, так и новые схемы работают одновременно (даже при внесении изменений!). Это устраняет риски, связанные с миграциями схемы, и значительно упрощает развертывание клиентских приложений, что также позволяет мгновенные откаты.
Смотрите вступительное сообщение в блоге для получения дополнительной информации о проблемах, решенных pgroll .
pgroll работает, создавая виртуальные схемы, используя представления сверх физических таблиц. Это позволяет выполнять все необходимые изменения, необходимые для миграции, не влияя на существующих клиентов.

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

Когда больше клиентских приложений не используют старую схему версию, миграция может быть завершена. Это удалит старую схему, и новая будет единственной доступной. Больше не нужны таблицы и столбцы будут удалены (ни один клиент не использует это на данный момент), а новые будут переименованы в их конечные имена. Клиентские приложения по -прежнему работают на этом этапе, так как представления все еще отображаются с соответствующими таблицами и столбцами.
Двоичные файлы доступны для Linux, MacOS & Windows, проверьте наши релизы.
Чтобы установить pgroll из источника, запустите следующую команду:
go install github.com/xataio/pgroll@latestПРИМЕЧАНИЕ. Требуется GO 1,23 или более поздней версии.
Чтобы установить pgroll с Homebrew, запустите следующую команду:
# macOS or Linux
brew tap xataio/pgroll
brew install pgroll Следуйте этим шагам, чтобы выполнить свою первую миграцию схемы, используя pgroll :
pgroll должен хранить некоторое внутреннее состояние в базе данных. Таблица создана для отслеживания текущей схемы версии и истории версий магазина. Чтобы подготовить базу данных, запустите следующую команду:
pgroll init --postgres-url postgres://user:password@host:port/dbname Создайте файл миграции. Вы можете проверить папку «Примеры» на наличие примеров. Например, используйте этот файл миграции для создания новой таблицы customers :
{
"name" : " initial_migration " ,
"operations" : [
{
"create_table" : {
"name" : " customers " ,
"columns" : [
{
"name" : " id " ,
"type" : " integer " ,
"pk" : true
},
{
"name" : " name " ,
"type" : " varchar(255) " ,
"unique" : true
},
{
"name" : " bio " ,
"type" : " text " ,
"nullable" : true
}
]
}
}
]
}Затем запустите следующую команду, чтобы запустить миграцию:
pgroll --postgres-url postgres://user:password@host:port/dbname start initial_migration.jsonЭто создаст новую версию схемы в базе данных и применит операции миграции (создайте таблицу). После завершения этой команды как старая версия схемы (без таблицы клиентов), так и новая (с таблицей клиентов) будут доступны одновременно.
После начала миграции клиентские приложения могут начать использовать новую версию схемы. Для этого они должны быть настроены для доступа к нему. Это можно сделать, установив search_path на новое имя версии схемы (предоставленная pgroll start Output), например:
SET search_path TO ' public_initial_migration ' ;После того, как больше нет клиентских приложений, использующих старую версию схемы, миграция может быть завершена. Это удалит старую схему. Чтобы завершить миграцию, запустите следующую команду:
pgroll --postgres-url postgres://user:password@host:port/dbname completeВ любой момент во время миграции его можно отказаться до предыдущей версии. Это удалит новую схему и оставит старую, как это было до начала миграции. Чтобы отказываться от миграции, запустите следующую команду:
pgroll --postgres-url postgres://user:password@host:port/dbname rollbackДля получения более широкого использования, учебных пособий и подробных вариантов относятся к руководствам и ссылкам в документации.
Некоторые показатели производительности работают на каждом коммите в main , чтобы отслеживать производительность с течением времени. Каждый эталон работает против Postgres 14.8, 15.3, 16.4, 17.0 и «Последний». Каждая строка на графике представляет количество строк, против которых был забежал контрольный показатель, в настоящее время 10K, 100K и 300K строк.
Backfill: ряды/с, чтобы заполнить текстовый столбец с placeholder значения. Мы используем нашу стратегию пакетирования по умолчанию 10 тысяч строк за партию без отбора.WriteAmplification/NoTrigger: базовые строки/s при написании данных в таблицу без триггера pgroll .WriteAmplification/WithTrigger: строки/s при написании данных в таблицу при настройке триггера pgroll .ReadSchema: проверяет количество выполнения в секунду функции read_schema , которая является основной функцией, выполняемой часто во время миграций.Их можно увидеть здесь.
Мы приветствуем вклад сообщества! Если вы хотите внести свой вклад в pgroll , пожалуйста, следуйте этим рекомендациям:
Для этого проекта мы обещаем действовать и взаимодействовать способами, которые способствуют открытому, гостеприимному, разнообразному, инклюзивному и здоровому сообществу.
Это список проектов и статей, которые помогли как вдохновение или иным образом, похожи на pgroll :
Этот проект лицензирован по лицензии Apache 2.0 - см. Файл лицензии для получения подробной информации.
Если у вас есть какие -либо вопросы, проблемы с столкновением или нужна помощь, откройте в этом репозитории проблему, присоединяйтесь к нашему разногласию, и наше сообщество будет рад помочь.
Сделано с ❤ от Xata?