Skip to content

Instantly share code, notes, and snippets.

@lucioreyli
Created August 16, 2025 02:12
Show Gist options
  • Select an option

  • Save lucioreyli/3a17597d3adb20c7630be3dae873d38b to your computer and use it in GitHub Desktop.

Select an option

Save lucioreyli/3a17597d3adb20c7630be3dae873d38b to your computer and use it in GitHub Desktop.
Go migrate using pgx v5 driver
package main
import (
"database/sql"
"log"
"os"
"github.com/golang-migrate/migrate/v4"
"github.com/golang-migrate/migrate/v4/database/postgres"
_ "github.com/golang-migrate/migrate/v4/source/file"
_ "github.com/jackc/pgx/v5/stdlib"
)
func main() {
// you don't need to change the protocol to pgx://, keep the postgres://
db, err := sql.Open("pgx", "postgres://postgres:postgres@localhost:5432/yourdatabase?sslmode=disable")
if err != nil {
log.Fatalln(err)
}
d, _ := postgres.WithInstance(db, &postgres.Config{})
defer func() {
if err = d.Close(); err != nil {
log.Println("close error:", err)
}
if err = db.Close(); err != nil {
log.Println("close error:", err)
}
}()
m, err := migrate.NewWithDatabaseInstance(
"file://cmd/migrate/migrations", "pgx", d) // change your migrations folder (folder/*.sql)
if err != nil {
log.Fatal(err)
}
if err := execMigration(m); err != nil {
log.Fatal(err)
}
}
func execMigration(m *migrate.Migrate) (err error) {
cmd := os.Args[1] // go run cmd/migrate.go up # or go run cmd/migrate.go down
if cmd == "up" {
err = m.Up()
}
if cmd == "down" {
err = m.Down()
}
return err
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment