| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- #!/bin/bash
- # LearningAnalytics 数据库修复脚本
- # 修复 student_attempts 表的字段类型错误
- # 1. ip_address: INET → VARCHAR(64)
- # 2. partial_score: NUMERIC(5,4) → NUMERIC(6,2)
- # 用法: bash fix_learning_analytics_db.sh
- set -e # 遇到错误立即退出
- echo "=========================================="
- echo "LearningAnalytics 数据库修复脚本"
- echo "=========================================="
- echo ""
- # 数据库配置
- DB_HOST="localhost"
- DB_PORT="5433"
- DB_NAME="learning_analytics"
- DB_USER="rag_user"
- DB_PASSWORD="your_password"
- # 检查数据库容器是否存在
- if docker ps -a | grep -q "learning_analytics_postgres"; then
- echo "✓ 检测到数据库容器: learning_analytics_postgres"
- DB_HOST="learning_analytics_postgres"
- DB_PORT="5432"
- else
- echo "⚠ 未检测到专用数据库容器,将使用本地 PostgreSQL"
- echo " 请确保本地 PostgreSQL 服务正在运行"
- fi
- echo ""
- echo "数据库配置:"
- echo " 主机: $DB_HOST"
- echo " 端口: $DB_PORT"
- echo " 数据库: $DB_NAME"
- echo " 用户: $DB_USER"
- echo ""
- # 执行 SQL 修复脚本
- echo "正在执行数据库修复..."
- echo " 修复字段:"
- echo " 1. ip_address: INET → VARCHAR(64)"
- echo " 2. partial_score: NUMERIC(5,4) → NUMERIC(6,2)"
- echo ""
- # 方法1: 使用 docker exec (推荐)
- if docker ps | grep -q "learning_analytics_postgres"; then
- docker exec learning_analytics_postgres psql -U rag_user -d learning_analytics <<'EOF'
- -- 1. 修改 ip_address 字段类型
- ALTER TABLE student_attempts
- ALTER COLUMN ip_address TYPE VARCHAR(64);
- -- 2. 修改 partial_score 字段类型
- ALTER TABLE student_attempts
- ALTER COLUMN partial_score TYPE NUMERIC(6,2) USING partial_score::NUMERIC(6,2);
- -- 3. 添加注释
- COMMENT ON COLUMN student_attempts.ip_address IS '客户端IP地址,字符串格式';
- COMMENT ON COLUMN student_attempts.partial_score IS '题目得分,保留2位小数,支持0-9999.99分';
- -- 4. 输出成功消息
- \echo ''
- \echo '✓ 修复完成!'
- \echo ' - ip_address: INET → VARCHAR(64)'
- \echo ' - partial_score: NUMERIC(5,4) → NUMERIC(6,2)'
- \echo ''
- EOF
- echo "✓ 数据库修复完成!"
- else
- echo "⚠ 未找到 learning_analytics_postgres 容器"
- echo " 请手动运行以下 SQL 命令:"
- echo ""
- echo " psql -h $DB_HOST -p $DB_PORT -U $DB_USER -d $DB_NAME -c \""
- echo " ALTER TABLE student_attempts"
- echo " ALTER COLUMN ip_address TYPE VARCHAR(64);"
- echo " ALTER TABLE student_attempts"
- echo " ALTER COLUMN partial_score TYPE NUMERIC(6,2);"
- echo " \""
- echo ""
- fi
- echo ""
- echo "验证修复结果..."
- echo ""
- # 验证字段类型
- if docker ps | grep -q "learning_analytics_postgres"; then
- echo "检查 ip_address 字段:"
- docker exec learning_analytics_postgres psql -U rag_user -d learning_analytics -c "\d student_attempts" | grep "ip_address"
- echo ""
- echo "检查 partial_score 字段:"
- docker exec learning_analytics_postgres psql -U rag_user -d learning_analytics -c "\d student_attempts" | grep "partial_score"
- fi
- echo ""
- echo "=========================================="
- echo "修复完成!现在可以正常提交评分。"
- echo "=========================================="
|