Skip to content

Repository files navigation

gom

A database migration tool for Go applications

Build StatusGo Report CardGo DocsLicenseGitHub tag

Gom is a database migration tool. Requires Go v1.18 or higher. It can be run as a command-line tool or injected into the application using embedding SQL migrations.

Contents

Features

  • Supports SQLite
  • CLI
  • Embedded migrations
  • Plain SQL for writing schema migrations
  • Incremental migration version using timestamps
  • Run migrations inside a transaction
  • Works in Go v1.18+

Install

go install github.com/alexandermac/gom/cmd/gom@latest

Usage

CLI

gom [FLAGS] DRIVER DBSTRING COMMAND
Flags:
--dir Migrations directory name (absolute or relative path)
--name A new migration file suffix
--verbose Prints debug information
Drivers:
sqlite
Commands:
help Shows this help
version Prints app version
init Creates the migration directory with a sample migration file and the migrations table in the database
create Creates a new migration file
migrate Migrates the DB to the most recent version available
rollback Roll backs the version by 1
Examples:
gom --dir db_migrations sqlite ./foo.db init
gom --dir db_migrations --name create_users sqlite ./foo.db create
gom sqlite ./foo.db migrate
gom sqlite ./foo.db rollback

Embedded migrations

It's possible to embed sql files into binary and corresponding filesystem abstraction. Such migrations can be applied when the app starts.

package main
import (
"database/sql""embed""github.com/alexandermac/gom"
)
//go:embed my_migrationsvarmigrationsDir embed.FSfuncmain() {
// connect the databaselog.Println("Migrating the database")
gom.SetBaseFS(migrationsDir)
gom.SetMigrationsDir("my_migrations")
iferr:=gom.Migrate(db); err!=nil {
panic(err)
}
}

API

func SetBaseFS(fsys simpleFS)

Sets a base file system to discover migrations. Call this function to pass an embedded migrations variable.

func SetMigrationsDir(dir string)

Sets the migrations directory.

func SetLogger(l Logger)

Sets the logger. Must be compatible with gom.Logger interface.

func Create(dir, name, content string) error

Creates a new migration file. Used in CLI tool.

func Migrate(db *sql.DB) error

Migrates the DB to the most recent version available.

func Rollback(db *sql.DB) error

Roll backs the version by 1.

License

Licensed under the MIT license.

Author

Alexander Mac

About

A database migration tool for Go applications

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages