Help us shape the future of Go! Take the 2026 Go Developer Survey

gormigrate

package module
v1.0.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 1, 2016 License: MIT Imports: 3 Imported by: 0

README

license GoDoc Go Report Card

Gormigrate

Gormigrate is a migration helper for Gorm. Gorm already have useful migrate functions, just misses proper schema versioning and rollback cababilities.

Supported databases

It supports the databases Gorm supports:

  • PostgreSQL
  • MySQL
  • SQLite
  • Microsoft SQL Server

Installing

go get -u gopkg.in/gormigrate.v1

Usage

package main

import (
	"log"

	"gopkg.in/gormigrate.v1"
	"github.com/jinzhu/gorm"
	_ "github.com/jinzhu/gorm/dialects/sqlite"
)

type Person struct {
	gorm.Model
	Name string
}

type Pet struct {
	gorm.Model
	Name     string
	PersonID int
}

func main() {
	db, err := gorm.Open("sqlite3", "mydb.sqlite3")
	if err != nil {
		log.Fatal(err)
	}
	if err = db.DB().Ping(); err != nil {
		log.Fatal(err)
	}

	db.LogMode(true)

	m := gormigrate.New(db, gormigrate.DefaultOptions, []*gormigrate.Migration{
		{
			ID: "201608301400",
			Migrate: func(tx *gorm.DB) error {
				return tx.AutoMigrate(&Person{}).Error
			},
			Rollback: func(tx *gorm.DB) error {
				return tx.DropTable("people").Error
			},
		},
		{
			ID: "201608301430",
			Migrate: func(tx *gorm.DB) error {
				return tx.AutoMigrate(&Pet{}).Error
			},
			Rollback: func(tx *gorm.DB) error {
				return tx.DropTable("pets").Error
			},
		},
	})

    err = m.Migrate()
    if err == nil {
		log.Printf("Migration did run successfully")
    } else {
		log.Printf("Could not migrate: %v", err)
    }
}

Documentation

Overview

Package gormigrate is a migration helper for Gorm (http://jinzhu.me/gorm/). Gorm already have useful migrate functions (http://jinzhu.me/gorm/database.html#migration), just misses proper schema versioning and rollback cababilities.

Example:

    package main

    import (
	       "log"

	       "github.com/go-gormigrate/gormigrate"
	       "github.com/jinzhu/gorm"
	       _ "github.com/jinzhu/gorm/dialects/sqlite"
    )

    type Person struct {
	        gorm.Model
         Name string
    }

    type Pet struct {
	        gorm.Model
	        Name     string
	        PersonID int
    }

    func main() {
	        db, err := gorm.Open("sqlite3", "mydb.sqlite3")
	        if err != nil {
		        log.Fatal(err)
	        }
	        if err = db.DB().Ping(); err != nil {
	    	    log.Fatal(err)
        	}

	        db.LogMode(true)

        	m := gormigrate.New(db, gormigrate.DefaultOptions, []*gormigrate.Migration{
	        	{
	        		ID: "201608301400",
	        		Migrate: func(tx *gorm.DB) error {
			        	return tx.AutoMigrate(&Person{}).Error
        			},
		        	Rollback: func(tx *gorm.DB) error {
				        return tx.DropTable("people").Error
			        },
        		},
	        	{
		        	ID: "201608301430",
		        	Migrate: func(tx *gorm.DB) error {
			        	return tx.AutoMigrate(&Pet{}).Error
		        	},
			        Rollback: func(tx *gorm.DB) error {
				        return tx.DropTable("pets").Error
		        	},
	        	},
	        })

	        err = m.Migrate()
        	if err == nil {
        		log.Printf("Migration did run successfully")
        	} else {
	        	log.Printf("Could not migrate: %v", err)
        	}
    }

Index

Constants

This section is empty.

Variables

View Source
var (
	// DefaultOptions can be used if you don't want to think about options.
	DefaultOptions = &Options{
		TableName:      "migrations",
		IDColumnName:   "id",
		UseTransaction: false,
	}

	// ErrRollbackImpossible is returned when trying to rollback a migration
	// that has no rollback function.
	ErrRollbackImpossible = errors.New("It's impossible to rollback this migration")

	// ErrNoMigrationDefined is returned when no migration is defined.
	ErrNoMigrationDefined = errors.New("No migration defined")
)

Functions

This section is empty.

Types

type Gormigrate

type Gormigrate struct {
	// contains filtered or unexported fields
}

Gormigrate represents a collection of all migrations of a database schema.

func New

func New(db *gorm.DB, options *Options, migrations []*Migration) *Gormigrate

New returns a new Gormigrate.

func (*Gormigrate) Migrate

func (g *Gormigrate) Migrate() error

Migrate executes all migrations that did not run yet.

func (*Gormigrate) RollbackLast

func (g *Gormigrate) RollbackLast() error

RollbackLast undo the last migration

func (*Gormigrate) RollbackMigration

func (g *Gormigrate) RollbackMigration(m *Migration) error

RollbackMigration undo a migration.

type MigrateFunc

type MigrateFunc func(*gorm.DB) error

MigrateFunc is the func signature for migrating.

type Migration

type Migration struct {
	// ID is the migration identifier. Usually a timestamp like "201601021504".
	ID string
	// Migrate is a function that will br executed while running this migration.
	Migrate MigrateFunc
	// Rollback will be executed on rollback. Can be nil.
	Rollback RollbackFunc
}

Migration represents a database migration (a modification to be made on the database).

type Options

type Options struct {
	// TableName is the migration table.
	TableName string
	// IDColumnName is the name of column where the migration id will be stored.
	IDColumnName string
	// UseTransaction makes Gormigrate execute migrations inside a single transaction.
	// Keep in mind that not all databases support DDL commands inside transactions.
	UseTransaction bool
}

Options define options for all migrations.

type RollbackFunc

type RollbackFunc func(*gorm.DB) error

RollbackFunc is the func signature for rollbacking.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL