113 lines
3.3 KiB
Go
113 lines
3.3 KiB
Go
// Package migrate 整库迁移
|
||
//
|
||
// 处理流程:源库内省 → 中间表示 → 目标方言 DDL → 分批搬运数据 → 序列修复。
|
||
// 独立于业务基座(不依赖 dao 与 logic),经 gdb 动态连接源库与目标库进行裸读裸写,
|
||
// 全程不触发全局钩子(租户隔离、软删除、审计盖章),保证数据原样落库。
|
||
package migrate
|
||
|
||
// ============================== 中间类型常量 ==============================
|
||
|
||
// 中间类型常量
|
||
//
|
||
// 源方言类型归一后的规范形态,各方言渲染器再翻译为目标方言
|
||
const (
|
||
TypeBool = "bool"
|
||
TypeTinyint = "tinyint"
|
||
TypeSmallint = "smallint"
|
||
TypeInt = "int"
|
||
TypeBigint = "bigint"
|
||
TypeFloat = "float"
|
||
TypeDouble = "double"
|
||
TypeDecimal = "decimal"
|
||
TypeVarchar = "varchar"
|
||
TypeChar = "char"
|
||
TypeText = "text"
|
||
TypeTinytext = "tinytext"
|
||
TypeMediumText = "mediumtext"
|
||
TypeLongText = "longtext"
|
||
TypeDate = "date"
|
||
TypeTime = "time"
|
||
TypeDateTime = "datetime"
|
||
TypeBlob = "blob"
|
||
TypeJson = "json"
|
||
TypeEnum = "enum"
|
||
TypeSet = "set"
|
||
TypeOther = "other"
|
||
)
|
||
|
||
// ============================== 迁移任务参数 ==============================
|
||
|
||
// Options 迁移任务参数
|
||
type Options struct {
|
||
Src DSN // 源库连接
|
||
Dst DSN // 目标库连接
|
||
|
||
DropTargetFirst bool // 迁移前清空目标库全部表
|
||
Tables []string // 表白名单(空=全部)
|
||
BatchSize int // 数据搬运批大小(默认 500)
|
||
}
|
||
|
||
// DSN 数据库连接要素
|
||
//
|
||
// SQLite 仅使用 Database 作为文件路径,Host 与 Port 忽略
|
||
type DSN struct {
|
||
Type string // 驱动名:mysql/pgsql/sqlite/mssql/oracle
|
||
Host string // 主机
|
||
Port string // 端口
|
||
Database string // 数据库名或文件路径
|
||
Username string // 用户名
|
||
Password string // 密码
|
||
}
|
||
|
||
// ============================== 元数据中间表示 ==============================
|
||
|
||
// TableMeta 源库表元数据
|
||
type TableMeta struct {
|
||
Name string // 表名
|
||
Comment string // 表注释
|
||
Columns []ColumnMeta // 列集合
|
||
Indexes []IndexMeta // 二级索引集合
|
||
}
|
||
|
||
// ColumnMeta 列元数据
|
||
//
|
||
// Type 为中间类型常量
|
||
type ColumnMeta struct {
|
||
Name string // 列名
|
||
Type string // 中间类型
|
||
Length int // varchar/char 长度;decimal 精度
|
||
Scale int // decimal 小数位
|
||
EnumVals []string // 枚举值集合
|
||
Nullable bool // 是否可空
|
||
Default string // 默认值原文(空=无默认);表达式类原样保留
|
||
AutoInc bool // 是否自增
|
||
Comment string // 列注释
|
||
IsPK bool // 是否主键
|
||
}
|
||
|
||
// IndexMeta 索引元数据
|
||
//
|
||
// 不含主键,主键经 ColumnMeta.IsPK 表达
|
||
type IndexMeta struct {
|
||
Unique bool // 是否唯一索引
|
||
Name string // 索引名
|
||
Columns []string // 索引列集合
|
||
}
|
||
|
||
// ============================== 迁移汇总 ==============================
|
||
|
||
// Report 迁移汇总
|
||
type Report struct {
|
||
TableTotal int // 待迁移表总数
|
||
TableOK int // 成功表数
|
||
TableFailed int // 失败表数
|
||
RowTotal int64 // 总搬运行数
|
||
Failed []FailedTable // 失败表记录
|
||
}
|
||
|
||
// FailedTable 失败表记录
|
||
type FailedTable struct {
|
||
Table string // 表名
|
||
Err string // 错误信息
|
||
}
|