Minimig is a forward-only, database migrator for SQL Server, PostgreSQL and MySQL.
Appveyor | Branch | Coverage |
---|---|---|
master |
Package | NuGet (Stable) | MyGet (Prerelease) |
---|---|---|
Minimig |
Easiest installation is via dotnet global tools running dotnet tool install --global Minimig
from your terminal.
To install the prerelease version (from myget), you can add the option --add-source https://www.myget.org/F/minimig/api/v3/index.json
A migration is just plain T-SQL saved in a .sql file. Individual commands are separated with the GO
keyword for sql server, just like when using SSMS.
In the case of mysql and postgresql, the separator used is the semicolon (;) since
GO
is not supported on those databases
For example:
CREATE TABLE One
(
Id int not null identity(1,1),
Name nvarchar(50) not null,
constraint PK_One primary key clustered (Id)
)
GO
INSERT INTO One (Name) VALUES ('Person')
GO
Migrations are executed as a transaction by default, which allows them to be rolled back if any command fails. You can disable this transaction for a specific migration by beginning the file with
-- no transaction --
.
We recommend prefixing migration file names with a zero-padded number so that the migrations are listed in chronological order. For example, a directory of migrations might look like:
0001 - Add Users table.sql
0002 - Add Posts.sql
0003 - Insert default users.sql
0004 - Add auth columns to Users.sql
0005 - Drop tables One To Three.sql
...
Migrations run from the command line, in order to allow for automation to be used.
To run migrations the typical usage is:
mig --folder="c:\path\to\migrations" --connection="Persist Security Info=False;Integrated Security=true;Initial Catalog=MyDatabase;server=localhost" --provider=sqlserver
By default the provider used is Sql Server
If you use integrated auth, you can use the --database
and --server
arguments instead of supplying a connection string (server defaults to "localhost").
mig --folder="c:\\path\\to\\migrations" --database=MyLocalDatabase --server=MyServer --provider=sqlserver
Use mig --help
to show the complete set of options:
Usage: Minimig [OPTIONS]+
Runs all *.sql files in the directory --f=<folder> specified.
The databse connection can be specified using the following combinations:
-A connection string with the --connection along a --provider
if no provider is specified, the program defaults to sqlserver.
-Minimig can generate an integrated auth connection string using
the --database and optional --server arguments, along a --provider.
-h, --help Shows this help message.
-c, --connection=VALUE A connection string (can be PostgreSQL or
SQLServer or MySQL). For integrated auth, you
can use --database and --server instead.
-d, --database=VALUE Generates an integrated auth connection string
for the specified database.
-s, --server=VALUE Generates an integrated auth connection string
with the specified server (default: localhost).
-f, --folder=VALUE The folder containing your .sql migration files
(defaults to current working directory).
--timeout=VALUE Command timeout duration in seconds (default:
30).
--preview Run outstanding migrations, but roll them back.
-p, --provider=VALUE Use a specific database provider options:
sqlserver (default), postgresql, mysql.
--global Run all outstanding migrations in a single
transaction, if possible.
--table=VALUE Name of the table used to track migrations
(default: Migrations).
--schema=VALUE Name of the schema to be used to track
migrations (default: dbo for sqlserver, public
for postgresql, mysql for mysql).
--force Will rerun modified migrations.
--version Print version number.
--count Print the number of outstanding migrations.
Minimig has no such concept. It is a forward-only tool. This is done to keep a minimalistic approach.
It is relatively trivial to configure a docker sql image and run minimig on a ci in order to test your sql migrations, a sample is included on the following repository
For uninstallation execute dotnet tool uninstall --global Minimig
from terminal.
This library started as a fork from Mayflower.net which is inactive
Minimig is available under the MIT License
Minimig's icon was created by Freepik under Creative Commons license 3.0