Skip to content

Latest commit

 

History

History
154 lines (106 loc) · 2.77 KB

README.md

File metadata and controls

154 lines (106 loc) · 2.77 KB

Migrator

Migrator is a database migration tool, that automates schema migration.

It scans Schema/Model changes and generate SQL migration scripts automatically to reconcile those changes with the Database.

Table of Contents

Features

  • Supports MySQL, PostgreSQL, SQLite, SQL Server.
  • Uses plain SQL for writing schema migrations.
  • Migrations are timestamp-versioned, to avoid version number conflicts with multiple developers.
  • Migrations are run atomically inside a transaction.
  • Supports creating and dropping databases (handy in development/test).
  • Easily plugable to your existing workflows that uses GORM.

Installation

To install Gin package, you need to install Go and set your Go workspace first.

  1. You first need Go installed, then you can use the below Go command to install Migrator.
go get -u github.com/alob-mtc/migrator
  1. Import it in your code:
import "github.com/alob-mtc/migrator"

Usage

Register Model

package main

import (
	"fmt"
	migrator "github.com/alob-mtc/migrator/lib"
	"gorm.io/driver/postgres"
	"gorm.io/gorm"
	"time"
)

type User struct {
	ID        string `gorm:"primaryKey;"`
	Username  string `gorm:"index; not null"`
	Active    *bool  `gorm:"index; not null; default:false"`
	CreatedAt time.Time
	UpdatedAt time.Time
	DeletedAt gorm.DeletedAt `gorm:"index"`
}

type Product struct {
	ID        string `gorm:"primaryKey;"`
	Name      string `gorm:"index; not null"`
	CreatedAt time.Time
	DeletedAt gorm.DeletedAt `gorm:"index"`
}


func main() {
	// Connecting to postgres
	dns := "postgres://test:test@localhost:54312/test_db"
	db, err := gorm.Open(postgres.Open(dns), &gorm.Config{})
	if err != nil {
		log.Fatal(err)
	}

	// Register Model
	newMigrator := migrator.New(db, "migrations/sql/")
	newMigrator.RegisterModel(&User{}, &Product{})

}

Creating Migrations

//.....

func main() {

	//.....

	err = newMigrator.Run(db, "create", "add_username_column")
	if err != nil {
		log.Fatal(err)
	}

}

Running Migrations

//.....

func main() {

	//.....

	err = newMigrator.Run(db, "up")
	if err != nil {
		log.Fatal(err)
	}

}

Rolling Back Migrations

//.....

func main() {

	//.....

	err = newMigrator.Run(db, "down")
	if err != nil {
		log.Fatal(err)
	}

}

Internals

TODO:

Contributing

Migrator is written in Go, pull requests are welcome.