Created
August 16, 2025 02:12
-
-
Save lucioreyli/3a17597d3adb20c7630be3dae873d38b to your computer and use it in GitHub Desktop.
Go migrate using pgx v5 driver
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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