//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() { if client != nil { _ = client.Close() } } func main() { flag.Parse() setUp() defer tearDown() // 只建新表/加列,不删列,保证生产数据安全 if err := client.Debug().Schema.Create( context.Background(), schema.WithDropIndex(true), schema.WithDropColumn(false), schema.WithDialect(dialect.Postgres), schema.WithForeignKeys(false), ); err != nil { log.Fatalf("failed creating schema resources: %v", err) } log.Println("schemas migrated successfully!") }