A SQL database migration toolkit in Golang.
- PostgreSQL
- MariaDB
- MySQL
- Sqlite3
First import the package:
import "github.com/DavidHuie/gomigrate"
Given a database/sql
database connection to a PostgreSQL database, db
,
and a directory to migration files, create a migrator:
migrator, _ := gomigrate.NewMigrator(db, gomigrate.Postgres{}, "./migrations")
You may also specify a specific logger to use, such as logrus:
migrator, _ := gomigrate.NewMigratorWithLogger(db, gomigrate.Postgres{}, "./migrations", logrus.New())
To migrate the database, run:
err := migrator.Migrate()
To rollback the last migration, run:
err := migrator.Rollback()
Migration files need to follow a standard format and must be present in the same directory. Given "up" and "down" steps for a migration, create a file for each by following this template:
{{ id }}_{{ name }}_{{ "up" or "down" }}.sql
For a given migration, the id
and name
fields must be the same.
The id field is an integer that corresponds to the order in which
the migration should run relative to the other migrations.
id
should not be 0
as that value is used for internal validations.
If I'm trying to add a "users" table to the database, I would create the following two files:
CREATE TABLE users();
DROP TABLE users;
Copyright (c) 2014 David Huie. See LICENSE.txt for further details.