Files
bj_power/bj_power_mes/schema/tools/migrate.go
T

81 lines
1.8 KiB
Go

//go:build ignore
package main
import (
"context"
"database/sql"
"flag"
"fmt"
"log"
"bj_power_mes/ent"
"bj_power_mes/internal/db"
"entgo.io/ent/dialect"
entsql "entgo.io/ent/dialect/sql"
"entgo.io/ent/dialect/sql/schema"
_ "github.com/jackc/pgx/v5/stdlib"
"github.com/zeromicro/go-zero/core/conf"
)
// 建表工具:DSN 一律从 etc 配置读取,不再硬编码
// 用法(在 bj_power_mes 目录下):go run schema/tools/migrate.go
var (
client *ent.Client
ctx = context.Background()
configFile = flag.String("config", "etc/bj_power_mes-api.yaml", "配置文件路径")
)
// migrateConf 与主配置结构一致,只取 Database 段
type migrateConf struct {
Database db.DatabaseConf
}
func setUp() {
var c migrateConf
conf.MustLoad(*configFile, &c)
dsn := fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=disable",
c.Database.Host, c.Database.Port, c.Database.User, c.Database.Password, c.Database.Dbname)
db, err := sql.Open("pgx", dsn)
if err != nil {
log.Fatal(err)
}
if _, err = db.Query("select 1"); err != nil {
log.Fatal(err)
}
drv := entsql.OpenDB(dialect.Postgres, db)
client = ent.NewClient(ent.Driver(drv))
}
func tearDown() {
err := client.Close()
if err != nil {
return
}
}
func main() {
flag.Parse()
setUp()
defer tearDown()
// Run the auto migration tool.
// WithDropColumn(false): 只建新表/加列,不删任何列,保证生产数据安全
if err := client.Debug().Schema.Create(
context.Background(),
schema.WithDropIndex(true),
schema.WithDropColumn(false),
schema.WithDialect(dialect.Postgres), // Ent dialect to use
schema.WithForeignKeys(false), // 不创建外键约束
); err != nil {
log.Fatalf("failed creating schema resources: %v", err)
}
log.Println("schemas migrated successfully!")
}