Added migrations
This commit is contained in:
parent
4a16acc87e
commit
5b18009658
34 changed files with 929 additions and 154 deletions
98
migrate.go
Normal file
98
migrate.go
Normal file
|
|
@ -0,0 +1,98 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"58team_blog/internal/infrastructure"
|
||||
"database/sql"
|
||||
"flag"
|
||||
"fmt"
|
||||
"log"
|
||||
|
||||
"github.com/golang-migrate/migrate"
|
||||
"github.com/golang-migrate/migrate/database/postgres"
|
||||
_ "github.com/golang-migrate/migrate/source/file"
|
||||
_ "github.com/lib/pq"
|
||||
)
|
||||
|
||||
func main() {
|
||||
var command = flag.String("command", "up", "Migration command: up, down, version, force.")
|
||||
var steps = flag.Int("steps", -1, "Number of migration steps (for up/down commands)")
|
||||
var version = flag.Int("version", -1, "Target version (for force command)")
|
||||
|
||||
config, err := infrastructure.LoadConfig()
|
||||
if err != nil {
|
||||
log.Fatal("Cannot load config file: ", err)
|
||||
}
|
||||
|
||||
DbUrl := "postgres://" + config.DBUser + ":" + config.DBPass +
|
||||
"@" + config.DBHost + ":" + config.DBPort + "/" + config.DBName + "?sslmode=disable"
|
||||
fmt.Println(DbUrl)
|
||||
|
||||
db, err := sql.Open("postgres", DbUrl)
|
||||
if err != nil {
|
||||
log.Fatal("Failed to connect to database:", err)
|
||||
}
|
||||
defer db.Close()
|
||||
|
||||
driver, err := postgres.WithInstance(db, &postgres.Config{})
|
||||
if err != nil {
|
||||
log.Fatal("Failed to create database driver:", err)
|
||||
}
|
||||
|
||||
m, err := migrate.NewWithDatabaseInstance("file://./migrations", "postgres", driver)
|
||||
if err != nil {
|
||||
log.Fatal("Failed to create migrate instance:", err)
|
||||
}
|
||||
defer m.Close()
|
||||
|
||||
switch *command {
|
||||
case "up":
|
||||
if *steps > 0 {
|
||||
err = m.Steps(*steps)
|
||||
} else {
|
||||
err = m.Up()
|
||||
}
|
||||
if err != nil && err != migrate.ErrNoChange {
|
||||
log.Fatal("Migration up failed:", err)
|
||||
}
|
||||
if err == migrate.ErrNoChange {
|
||||
fmt.Println("No migrations to apply")
|
||||
} else {
|
||||
fmt.Println("Migrations applied successfully")
|
||||
}
|
||||
|
||||
case "down":
|
||||
if *steps > 0 {
|
||||
err = m.Steps(-*steps)
|
||||
} else {
|
||||
err = m.Down()
|
||||
}
|
||||
if err != nil && err != migrate.ErrNoChange {
|
||||
log.Fatal("Migration down failed:", err)
|
||||
}
|
||||
if err == migrate.ErrNoChange {
|
||||
fmt.Println("No migrations to rollback")
|
||||
} else {
|
||||
fmt.Println("Migrations rolled back successfully")
|
||||
}
|
||||
|
||||
case "version":
|
||||
version, dirty, err := m.Version()
|
||||
if err != nil {
|
||||
log.Fatal("Failed to get version:", err)
|
||||
}
|
||||
fmt.Printf("Current version: %d (dirty: %v)\n", version, dirty)
|
||||
|
||||
case "force":
|
||||
if *version < 0 {
|
||||
log.Fatal("Version is required for force command. Use -version flag")
|
||||
}
|
||||
err = m.Force(*version)
|
||||
if err != nil {
|
||||
log.Fatal("Force migration failed:", err)
|
||||
}
|
||||
fmt.Printf("Forced migration to version %d\n", *version)
|
||||
|
||||
default:
|
||||
log.Fatal("Unknown command:", *command)
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue