#!/usr/bin/env bash set -euo pipefail # 这个脚本用于删除已合并到 000001_init.sql 的旧迁移文件 # 使用场景:迁移文件合并后,清理旧的分散文件 ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" MIGRATIONS_DIR="${ROOT_DIR}/backend/migrations" RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[1;34m' NC='\033[0m' log() { printf "${BLUE}[clean]${NC} %s\n" "$*" } log_success() { printf "${GREEN}[clean]${NC} %s\n" "$*" } log_warn() { printf "${YELLOW}[clean]${NC} %s\n" "$*" } log_error() { printf "${RED}[clean]${NC} %s\n" "$*" >&2 } # 要删除的旧迁移文件列表 OLD_MIGRATIONS=( "000002_payment_refund_schema.sql" "000003_add_indexes.sql" "000004_add_support_status.sql" "000005_add_announcements.sql" "000006_insert_sample_announcements.sql" "000007_add_announcement_permissions.sql" "000008_fix_announcement_charset.sql" ) main() { cd "${MIGRATIONS_DIR}" log "检查旧迁移文件..." local found=0 local file for file in "${OLD_MIGRATIONS[@]}"; do if [[ -f "${file}" ]]; then found=$((found + 1)) log_warn "发现旧文件:${file}" fi done if [[ "${found}" == "0" ]]; then log_success "没有发现旧的迁移文件,无需清理" exit 0 fi log "" log "即将删除 ${found} 个旧迁移文件" log "这些文件的内容已经合并到 000001_init.sql 中" log "" # 确认删除 read -p "确认删除?(yes/no): " -r echo if [[ ! "${REPLY}" =~ ^[Yy][Ee][Ss]$ ]]; then log "取消删除" exit 0 fi # 执行删除 local deleted=0 for file in "${OLD_MIGRATIONS[@]}"; do if [[ -f "${file}" ]]; then rm -f "${file}" log_success "已删除:${file}" deleted=$((deleted + 1)) fi done log "" log_success "清理完成,已删除 ${deleted} 个文件" log "" log "注意事项:" log "1. 如果是开发环境,建议执行:./scripts/dev.sh --clean-init" log "2. 如果是生产环境,建议执行:./scripts/deploy-prod.sh --clean-init" log "3. 这些命令会清理旧数据库并使用新的 000001_init.sql 初始化" } main "$@"