topfans/backend/scripts/apply_mint_orders_migration.sh
2026-04-07 22:29:48 +08:00

75 lines
2.4 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env bash
# 执行 mint_orders 表迁移:添加 material_type 和 event 字段
# 使用方式bash scripts/apply_mint_orders_migration.sh
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR/.."
# 数据库配置(从环境变量读取,或使用默认值)
DB_HOST="${DB_HOST:-localhost}"
DB_PORT="${DB_PORT:-5432}"
DB_USER="${DB_USER:-haihuizhu}"
DB_PASSWORD="${DB_PASSWORD:-admin}"
DB_NAME="${DB_NAME:-top-fans}"
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
NC='\033[0m'
echo -e "${BLUE}========================================${NC}"
echo -e "${BLUE} 执行 mint_orders 表迁移${NC}"
echo -e "${BLUE} 添加 material_type 和 event 字段${NC}"
echo -e "${BLUE}========================================${NC}"
echo " 数据库: ${DB_NAME}@${DB_HOST}:${DB_PORT}"
echo " 用户: ${DB_USER}"
echo ""
# 检查 PostgreSQL 客户端
if ! command -v psql >/dev/null 2>&1; then
echo -e "${RED}❌ 未找到 psql 命令,请安装 PostgreSQL 客户端${NC}"
exit 1
fi
# 执行迁移
echo -e "${YELLOW}[1/1] 执行数据库迁移...${NC}"
export PGPASSWORD="${DB_PASSWORD}"
if psql -h "${DB_HOST}" -p "${DB_PORT}" -U "${DB_USER}" -d "${DB_NAME}" -f scripts/migrations/add_material_type_and_event_to_mint_orders.sql > /tmp/mint_orders_migration.log 2>&1; then
echo -e "${GREEN}✓ 数据库迁移成功${NC}"
echo ""
echo -e "${BLUE}========================================${NC}"
echo -e "${BLUE} 迁移完成${NC}"
echo -e "${BLUE}========================================${NC}"
echo ""
echo -e "${GREEN}已添加字段:${NC}"
echo " - material_type VARCHAR(50) NULL (素材类型)"
echo " - event VARCHAR(100) NULL (藏品事件)"
echo ""
echo -e "${CYAN}验证字段:${NC}"
psql -h "${DB_HOST}" -p "${DB_PORT}" -U "${DB_USER}" -d "${DB_NAME}" -c "
SELECT
column_name,
data_type,
character_maximum_length,
is_nullable
FROM information_schema.columns
WHERE table_name = 'mint_orders'
AND column_name IN ('material_type', 'event')
ORDER BY column_name;
"
echo ""
else
echo -e "${RED}❌ 数据库迁移失败${NC}"
echo -e "${YELLOW}错误日志:${NC}"
cat /tmp/mint_orders_migration.log
exit 1
fi
unset PGPASSWORD