//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", "配置文件路径") ) func setUp() { var c db.DatabaseConf conf.MustLoad(*configFile, &c) dsn := fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=disable", c.Host, c.Port, c.User, c.Password, c.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!") }