Skip to main content

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: