v0.0.1
go-migrate
A PostgreSQL schema migration tool that generates and applies migrations by comparing your desired schema (SQL files) with the current database state.
Features
- Schema comparison: Compare your desired schema against the live database
- Migration generation: Automatically generate SQL migration statements
- Migration application: Apply migrations directly to the database
- Type support: Handles tables, columns, indexes, foreign keys, enums, and constraints
Installation
As a Library
go get git.petrovv.com/go-migrate
CLI Tool
go install git.petrovv.com/go-migrate/cmd/go-migrate@latest
Usage
Library
import "git.petrovv.com/go-migrate"
ctx := context.Background()
db, _ := pgxpool.New(ctx, "postgres://user:pass@localhost:5432/db")
// Generate migrations
migrations, err := migrate.GetMigrations(ctx, db, "schema/")
for _, m := range migrations {
fmt.Println(m)
}
// Or use LoadDesiredSchema and CompareSchemas for more control
desired, _ := migrate.LoadDesiredSchema("schema/")
current, _ := migrate.GetCurrentSchema(ctx, db)
migrations = migrate.CompareSchemas(current, desired)
CLI
# Generate migration SQL
go-migrate -cmd=generate -dir=schema
# Apply migrations
go-migrate -cmd=apply -dir=schema
Flags:
-dir: Directory containing schema SQL files (default:schema)-cmd:generateorapply
Schema Files
Place your desired schema SQL files in a directory (e.g., schema/). Files are loaded alphabetically.
Example schema/01_users.sql:
CREATE TABLE users (
id BIGSERIAL PRIMARY KEY,
name TEXT NOT NULL,
email TEXT NOT NULL UNIQUE
);
CREATE INDEX idx_users_name ON users (name);
Environment Variables
For the CLI, database connection can be configured via environment variables or .env file:
DB_USER=postgres
DB_PASS=password
DB_HOST=localhost
DB_PORT=5432
DB_NAME=mydb
Languages
Go
100%