Задний план
Позвольте мне начать это снова, сказав, я пишу это как для создания осведомленности о Yuniql ; База данных с открытым исходным кодом DEVOPS INSER поддерживаю, и поделиться некоторыми опытом, которые я надеюсь, поможет нашему сообществу сделать программное обеспечение лучше, быстрее, безопаснее.
Решения здесь работает с SQLSERVER, PostgreSQL и MySQL.:) Не давайте доберемся до мяса истории …
Одной из проблем при работе с базами данных являются вариации сценариев и определений схем, обусловленные соблюдением существующего управления и практики.
Запросы к базе данных 🍵
Некоторая организация требует имен баз данных для представления среды, в которой она создана. Допустим, у нас есть базы данных HR и PAYROLL, где каждый имеет Dev, Test и Prod. В результате в среде развития у нас есть Hrdb-dev и Payrolldb-dev Отказ Этот скрипт, безусловно, не может быть применен к тестированию и базам данных, поскольку имена баз данных суффиксируются с помощью Dev Code Code.
CREATE VIEW [dbo].[vw_employee_timesheets]
AS
SELECT E.employee_id, E.first_name, E.last_name, E.position, T.checkin_time_utc, T.checkout_time_utc
FROM [HRDB-DEV].[dbo].[employees] E
INNER JOIN [PAYROLLDB-DEV].[dbo].[timesheets] T
ON E.employee_id = t.employee_id
GO
Спецификаты для окружающей среды 🍈
В другом случае мы можем захотеть создавать разделенные таблицы BEST-FIND для больших данных в тестовой и продуктовой среде. Мы можем наблюдать относительно сложную конфигурацию того же стола при создании в продуктах.
CREATE PARTITION FUNCTION RangePartFunction (datetime)
AS RANGE RIGHT FOR VALUES ('20200101', '20200201');
CREATE PARTITION SCHEME RangePartScheme AS PARTITION RangePartFunction
TO ([PartBefore2020], [Part202001], [Part202002]);
CREATE TABLE [dbo].[timesheets](
[timesheet_id] [int] IDENTITY(1,1) NOT NULL,
[employee_id] [int] NOT NULL,
[checkin_time_utc] [datetime] NOT NULL,
[checkout_timeutc] [datetime] NULL,
CONSTRAINT [PK_timesheets] PRIMARY KEY CLUSTERED ([timesheet_id] ASC)
) ON RangePartScheme (checkin_time_utc);
CREATE CLUSTERED INDEX IDX_Part On [dbo].[timesheets](datetime)
ON RangePartScheme (checkin_time_utc);
Но подождите, это не может быть необходимо для местного развития и тестирования, где загружается минимальный набор образцов. Упрошенная модель, как это может просто работать.
CREATE TABLE [dbo].[timesheets](
[timesheet_id] [int] IDENTITY(1,1) NOT NULL,
[employee_id] [int] NOT NULL,
[checkin_time_utc] [datetime] NOT NULL,
[checkout_timeutc] [datetime] NULL,
CONSTRAINT [PK_timesheets] PRIMARY KEY CLUSTERED ([timesheet_id] ASC)
) ON [PRIMARY];
Растворы
YUNIQL обращается к этому двумя способами:
- через замену токена
- через зарезервированные среды каталоги/папки.
Для начала, давайте создадим новый репозиторий репозитория. Репозиторий Yuniql — это не что иное, как репозиторий GIT-Ready, чтобы держать все файлы ваших сценариев. Для руководства о том, как начать с YUNIQL, пожалуйста, посетите https://yuniql.io/docs/ Отказ
# install yuniql cli dotnet tool install -g yuniql.cli # prepare your repository cd c:\temp md yuniql-environment-aware cd c:\temp\yuniql-environment-aware # initialize your repository yuniql init c:\temp\yuniql-environment-aware>yuniql init INF 2020-05-31T... Created script directory c:\temp\yuniql-environment-aware\_init INF 2020-05-31T... Created script directory c:\temp\yuniql-environment-aware\_pre INF 2020-05-31T... Created script directory c:\temp\yuniql-environment-aware\v0.00 INF 2020-05-31T... Created script directory c:\temp\yuniql-environment-aware\_draft INF 2020-05-31T... Created script directory c:\temp\yuniql-environment-aware\_post INF 2020-05-31T... Created script directory c:\temp\yuniql-environment-aware\_erase INF 2020-05-31T... Created file c:\temp\yuniql-environment-aware\README.md INF 2020-05-31T... Created file c:\temp\yuniql-environment-aware\Dockerfile INF 2020-05-31T... Created file c:\temp\yuniql-environment-aware\.gitignore INF 2020-05-31T... Initialized c:\temp\yuniql-environment-aware.
Замена токена с Yuniql 🍒
При использовании YUNIQL мы можем указать токены, которые нужно заменить во время миграции. Для данного случая мы используем Окружающая среда как ключ токена.
CREATE VIEW [dbo].[vw_employee_timesheets]
AS
SELECT 'hello yuniql!' message;
--SELECT E.employee_id, E.first_name, E.last_name, E.position, T.checkin_time_utc, T.checkout_time_utc
--FROM [HRDB-${ENVIRONMENT}].[dbo].[employees] E
--INNER JOIN [PAYROLLDB-${ENVIRONMENT].[dbo].[timesheets] T
--ON E.employee_id = t.employee_id
GO
Затем во время прогона миграции мы передаем пару ключ/значение токена. В процессе YUNIQL проверяет все токены в файлах сценариев и заменяет их.
yuniql run -a -k "ENVIRONMENT=DEV" yuniql run -a -k "ENVIRONMENT=TEST" yuniql run -a -k "ENVIRONMENT=PROD
В качестве альтернативы, мы можем передать несколько токенов в одном вызове.
yuniql run -a -k "ENVIRONMENT=DEV,USERNAME=rdagumampan,SOURCE=AzDevOpsTask"
Зарезервированные на окружающую среду каталоги с Yuniql 🍋
Иногда будет проще группу всех сценариев в одном зарезервированном хранилище. Хотя это заставляет нас сделать дублированные файлы сценариев, он также может помочь нам оставаться организованным. В этом образце давайте создадим _Послокость , _тест и _продукция каталоги.
Когда мы называем Yuniql Run мы можем пройти Environment требовать в окружающей среде миграции. Yuniql Откройте для себя все каталоги, сортируйте и подготовиться к исполнению. При наличии каталога зарезервированного окружающей среды он выбирает правильный каталог.
yuniql run -a --environment development yuniql run -a --environment test yuniql run -a --environment production
Расставание слов ㊗️.
WHOAH! Вы достигли этого далеко! Спасибо! 🍻.
Миграция в средах, использующих замены токена и среды — связанные с окружающей средой — связанные с каталоги, адресованные вариации сценариев, требуемые внутренними политиками и руководящими предприятиями. Вы также можете найти другие случаи использования для замены токена, такие как аннотирование сценариев и исходных данных.
Слияние Пожалуйста, поддержите YUNIQL, нажав Звезда GitHub! Для молодого проекта, как это, звезда может помочь захватить больше пользователей и улучшить инструмент на ранней стадии. https://github.com/rdagumampan/yuniql
Ваше здоровье!
Оригинал: «https://dev.to/rdagumampan/run-environment-aware-database-migrations-with-yuniql-522l»