Quick Start
Install Queen:
go get github.com/yaop-labs/queen
Queen currently requires Go 1.26.3+.
Run one migration
package main
import (
"context"
"database/sql"
"log"
"github.com/yaop-labs/queen"
"github.com/yaop-labs/queen/drivers/postgres"
_ "github.com/jackc/pgx/v5/stdlib"
)
func main() {
db, err := sql.Open("pgx", "postgres://localhost/myapp?sslmode=disable")
if err != nil {
log.Fatal(err)
}
defer db.Close()
q := queen.New(postgres.New(db))
defer q.Close()
q.MustAdd(queen.M{
Version: "001",
Name: "create_users",
UpSQL: `
CREATE TABLE users (
id SERIAL PRIMARY KEY,
email TEXT NOT NULL UNIQUE,
created_at TIMESTAMP NOT NULL DEFAULT NOW()
);
`,
DownSQL: `DROP TABLE users;`,
})
if err := q.Up(context.Background()); err != nil {
log.Fatal(err)
}
}
Check status
statuses, err := q.Status(ctx)
if err != nil {
return err
}
for _, s := range statuses {
fmt.Println(s.Version, s.Name, s.Status)
}
Add a migrator command
Create cmd/migrate/main.go:
package main
import (
"github.com/yaop-labs/queen/cli"
"myapp/migrations"
_ "github.com/jackc/pgx/v5/stdlib"
)
func main() {
cli.Run(migrations.Register)
}
Run it:
go run ./cmd/migrate status --driver postgres --dsn "$DATABASE_URL"
go run ./cmd/migrate plan --driver postgres --dsn "$DATABASE_URL"
go run ./cmd/migrate up --driver postgres --dsn "$DATABASE_URL" --yes
Next reads:
- Migration Format for SQL, Go-function, and mixed migrations.
- Database Examples for driver-specific SQL.
- Support Matrix before choosing a non-PostgreSQL production driver.