56 lines
1.2 KiB
Go
56 lines
1.2 KiB
Go
package postgresql
|
|
|
|
import (
|
|
"database/sql"
|
|
"fmt"
|
|
"github.com/Selly-Modules/logger"
|
|
"github.com/golang-migrate/migrate/v4"
|
|
"github.com/golang-migrate/migrate/v4/database/postgres"
|
|
_ "github.com/golang-migrate/migrate/v4/source/file"
|
|
"os"
|
|
)
|
|
|
|
func runMigration(db *sql.DB, server string) {
|
|
// init migrate data
|
|
driver, _ := postgres.WithInstance(db, &postgres.Config{})
|
|
m, err := migrate.NewWithDatabaseInstance(
|
|
fmt.Sprintf("file:///%s", getMigrationDirectoryPath(server)),
|
|
"postgres",
|
|
driver,
|
|
)
|
|
|
|
// up
|
|
if err == nil {
|
|
if err = m.Up(); err != nil && err.Error() != "no change" {
|
|
logger.Error("run migration", logger.LogData{
|
|
Source: "runMigration",
|
|
Message: err.Error(),
|
|
Data: nil,
|
|
})
|
|
fmt.Println("run schema migration error:", err.Error())
|
|
}
|
|
fmt.Printf("⚡️[postgres]: done migration \n")
|
|
}
|
|
}
|
|
|
|
func getMigrationDirectoryPath(server string) string {
|
|
migrationDir := fmt.Sprintf("/external/postgresql/%s/migrations/sql", server)
|
|
|
|
dirname, err := os.Getwd()
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
// Check path existed
|
|
path := dirname + migrationDir
|
|
if _, err = os.Stat(path); os.IsNotExist(err) {
|
|
// Create if not existed
|
|
err = os.Mkdir(path, 0755)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
return path
|
|
}
|