/PlainSql.Migrations

Executes migration scripts written in plain old SQL

Primary LanguageC#MIT LicenseMIT

PlainSql.Migrations

Build status Coverage Status Conventional Commits

Execute migration scripts written in plain old SQL. Only executes each migration once.

Installation

dotnet add package PlainSql.Migrations

Usage

PlainSql.Migrations provide a script loader and a migrator that interact to load and execute migration scripts.

using PlainSql.Migrations;

private void ExecuteMigrations(string connectionString, string environment)
{
    using (var connection = new SqlConnection(connectionString))
    {
        connection.Open();

        var migrationScripts = MigrationScriptsLoader.FromDirectory("./MigrationScripts");

        Migrator.ExecuteMigrations(connection, migrationScripts);

        Console.Writeline("Executed database migration scripts");
    }
}

MigrationScriptsLoader.FromDirectory orders the migration scripts alphabetically (using System.StringComparer.InvariantCulture).

Global Tool

PlainSql.Migrations offers a .NET Global tool that can be installed like so dotnet tool install --global PlainSql.Migrations.Tool and then executed from the terminal like so migrate -c "Uid=myuser;Pwd=password1;Host=localhost;Database=northwind;" -d postgres.

Database Support

  • SQLite
  • MS SQL
  • PostgreSQL

Concurrency

Migrations are executed in a single transaction with isolation level "Serializable". This usually means that executing migrations is concurrency-safe. For details on which SQL statements are supported by this transaction level, please refer to the documentation of your database technology.