share-knowledge-server/initialize/migrate.go

68 lines
2.0 KiB
Go

package initialize
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
migrate "github.com/golang-migrate/migrate/v4"
migrate_mysql "github.com/golang-migrate/migrate/v4/database/mysql"
migrate_postgres "github.com/golang-migrate/migrate/v4/database/postgres"
_ "github.com/golang-migrate/migrate/v4/source/file"
_ "github.com/lib/pq"
"gitlink.org.cn/Gitlink/share-knowledge-server/global"
)
func Migrate() {
switch global.GO_CONFIG.Database.Type {
case "mysql":
MigrateSetMysql()
return
case "postgresql":
MigrateSetPostgresql()
return
default:
MigrateSetMysql()
return
}
}
func MigrateSetPostgresql() {
db, err := sql.Open("postgres", fmt.Sprintf("%s:%s@(%s:%d)/%s?sslmode=enable", global.GO_CONFIG.Database.User, global.GO_CONFIG.Database.Password, global.GO_CONFIG.Database.Host, global.GO_CONFIG.Database.Port, global.GO_CONFIG.Database.Name))
if err != nil {
global.GO_LOG.Error(fmt.Sprintf("sql.Open: %v", err))
}
driver, err := migrate_postgres.WithInstance(db, &migrate_postgres.Config{})
if err != nil {
global.GO_LOG.Error(fmt.Sprintf("migrate_postgres.WithInstance: %v", err))
}
m, err := migrate.NewWithDatabaseInstance(
"files:///migrations",
"postgres", driver)
if err != nil {
global.GO_LOG.Error(fmt.Sprintf("migrate.NewWithDatabaseInstance: %v", err))
}
m.Up()
// m.Down()
}
func MigrateSetMysql() {
db, err := sql.Open("mysql", fmt.Sprintf("%s:%s@(%s:%d)/%s?multiStatements=true", global.GO_CONFIG.Database.User, global.GO_CONFIG.Database.Password, global.GO_CONFIG.Database.Host, global.GO_CONFIG.Database.Port, global.GO_CONFIG.Database.Name))
if err != nil {
global.GO_LOG.Fatal(fmt.Sprintf("sql.Open: %v", err))
}
driver, err := migrate_mysql.WithInstance(db, &migrate_mysql.Config{})
if err != nil {
global.GO_LOG.Fatal(fmt.Sprintf("migrate_mysql.WithInstance: %v", err))
}
m, err := migrate.NewWithDatabaseInstance(
"file://migrations",
"migrate", driver)
if err != nil {
global.GO_LOG.Fatal(fmt.Sprintf("migrate.NewWithDatabaseInstance: %v", err))
}
m.Up()
// m.Down()
}