Рубрики
Uncategorized

Запустите среду, освещающие миграции базы данных с YUNIQL

Фон позвольте мне начать это снова, сказав, я пишу это как для создания осведомленности о … Теги с базой данных, DEVOPS, DOTNET, DOTNETNECORE.

Задний план

Позвольте мне начать это снова, сказав, я пишу это как для создания осведомленности о 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 обращается к этому двумя способами:

  1. через замену токена
  2. через зарезервированные среды каталоги/папки.

Для начала, давайте создадим новый репозиторий репозитория. Репозиторий 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»