数据库迁移
This commit is contained in:
@@ -38,11 +38,12 @@ show_usage() {
|
||||
用法: $0 [命令] [参数]
|
||||
|
||||
命令:
|
||||
up [N] 向上迁移 N 步 (默认: 全部)
|
||||
up [N] 向上迁移 N 步 (默认: 全部,完成后自动检查 legacy 表)
|
||||
down [N] 向下回滚 N 步 (默认: 1)
|
||||
create NAME 创建新的迁移文件
|
||||
version 显示当前迁移版本
|
||||
force V 强制设置迁移版本为 V (用于修复脏数据库状态)
|
||||
check-legacy 检查 legacy 表 (tb_user/tb_order) 是否仍存在
|
||||
help 显示此帮助信息
|
||||
|
||||
环境变量:
|
||||
@@ -59,10 +60,36 @@ show_usage() {
|
||||
$0 create add_sim_table # 创建新迁移文件
|
||||
$0 version # 查看当前版本
|
||||
$0 force 1 # 强制设置版本为 1
|
||||
$0 check-legacy # 单独检查 tb_user/tb_order 是否存在
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
check_legacy_tables() {
|
||||
if ! command -v psql &> /dev/null; then
|
||||
echo "提示: 未检测到 psql 命令,跳过 legacy 表检查"
|
||||
return
|
||||
fi
|
||||
|
||||
echo "正在检查 legacy 表 tb_user / tb_order..."
|
||||
if ! CHECK_RESULT=$(psql "$DATABASE_URL" -Atqc "SELECT table_name FROM information_schema.tables WHERE table_schema='public' AND table_name IN ('tb_user','tb_order');"); then
|
||||
echo "警告: 无法执行 legacy 表检查,请手动确认"
|
||||
return
|
||||
fi
|
||||
|
||||
if [ -z "$CHECK_RESULT" ]; then
|
||||
echo "✓ 未发现 legacy 表,数据库结构已与代码同步"
|
||||
else
|
||||
echo "⚠ 检测到以下 legacy 表仍然存在:"
|
||||
echo "$CHECK_RESULT" | while read -r table_name; do
|
||||
if [ -n "$table_name" ]; then
|
||||
printf ' - %s\n' "$table_name"
|
||||
fi
|
||||
done
|
||||
echo "请确保已经执行 000004_drop_legacy_user_order 迁移或手动清理上述表"
|
||||
fi
|
||||
}
|
||||
|
||||
# 主命令处理
|
||||
case "$1" in
|
||||
up)
|
||||
@@ -73,6 +100,8 @@ case "$1" in
|
||||
echo "正在向上迁移 $2 步..."
|
||||
migrate -path "$MIGRATIONS_DIR" -database "$DATABASE_URL" up "$2"
|
||||
fi
|
||||
echo "迁移完成,开始检查 legacy 表..."
|
||||
check_legacy_tables
|
||||
;;
|
||||
down)
|
||||
STEPS="${2:-1}"
|
||||
@@ -103,6 +132,9 @@ case "$1" in
|
||||
echo "强制设置迁移版本为: $2"
|
||||
migrate -path "$MIGRATIONS_DIR" -database "$DATABASE_URL" force "$2"
|
||||
;;
|
||||
check-legacy)
|
||||
check_legacy_tables
|
||||
;;
|
||||
help|--help|-h)
|
||||
show_usage
|
||||
;;
|
||||
|
||||
Reference in New Issue
Block a user