From 88cae4018ae4da7da83c0bea4a4f654a7da49883 Mon Sep 17 00:00:00 2001 From: WrBug Date: Sat, 31 Jan 2026 20:51:26 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20V29=20migration=20S?= =?UTF-8?q?QL=20=E8=AF=AD=E6=B3=95=E5=85=BC=E5=AE=B9=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除 DROP COLUMN IF EXISTS(仅 MySQL 8.0.29+ 支持) - 使用标准 DROP COLUMN 语法(MySQL 5.7+ 兼容) - 添加 Flyway 清理脚本 --- backend/fix_flyway_v29.sh | 59 +++++++++++++++++++ .../V29__drop_unused_backtest_fields.sql | 18 +++--- 2 files changed, 69 insertions(+), 8 deletions(-) create mode 100755 backend/fix_flyway_v29.sh diff --git a/backend/fix_flyway_v29.sh b/backend/fix_flyway_v29.sh new file mode 100755 index 0000000..9b833dd --- /dev/null +++ b/backend/fix_flyway_v29.sh @@ -0,0 +1,59 @@ +#!/bin/bash +# 清理 Flyway V29 失败记录的脚本 + +echo "=== 清理 Flyway V29 失败记录 ===" +echo "" +echo "请确保 MySQL 正在运行,然后输入数据库密码" +echo "" + +# 数据库配置 +DB_HOST="localhost" +DB_PORT="3306" +DB_NAME="polymarket_bot" +DB_USER="root" + +# 检查 MySQL 命令是否可用 +if ! command -v mysql &> /dev/null; then + echo "❌ 错误: 未找到 mysql 命令" + echo "" + echo "请使用数据库客户端(如 Navicat、DataGrip 等)执行以下 SQL:" + echo "" + echo "-- 1. 查看 Flyway 历史记录" + echo "SELECT version, description, installed_on, success " + echo "FROM flyway_schema_history " + echo "WHERE version >= 28" + echo "ORDER BY installed_rank;" + echo "" + echo "-- 2. 删除 V29 的失败记录" + echo "DELETE FROM flyway_schema_history WHERE version = '29';" + echo "" + exit 1 +fi + +# 执行清理 +echo "正在连接数据库..." +mysql -h "$DB_HOST" -P "$DB_PORT" -u "$DB_USER" -p "$DB_NAME" << 'EOF' +-- 查看当前状态 +SELECT '=== 当前 Flyway 历史记录 ===' as ''; +SELECT version, description, installed_on, success +FROM flyway_schema_history +WHERE version >= 28 +ORDER BY installed_rank; + +-- 删除 V29 失败记录 +SELECT '=== 删除 V29 记录 ===' as ''; +DELETE FROM flyway_schema_history WHERE version = '29'; + +-- 确认删除结果 +SELECT CONCAT('已删除 ', ROW_COUNT(), ' 条记录') as result; + +-- 再次查看状态 +SELECT '=== 清理后的 Flyway 历史记录 ===' as ''; +SELECT version, description, installed_on, success +FROM flyway_schema_history +WHERE version >= 28 +ORDER BY installed_rank; +EOF + +echo "" +echo "✅ 清理完成!现在可以重启应用了" diff --git a/backend/src/main/resources/db/migration/V29__drop_unused_backtest_fields.sql b/backend/src/main/resources/db/migration/V29__drop_unused_backtest_fields.sql index 62741a1..80e18d8 100644 --- a/backend/src/main/resources/db/migration/V29__drop_unused_backtest_fields.sql +++ b/backend/src/main/resources/db/migration/V29__drop_unused_backtest_fields.sql @@ -1,11 +1,13 @@ -- Drop unused columns from backtest_task table -- These fields are not needed for backtest scenarios as they use historical data +-- Note: Using standard SQL syntax compatible with MySQL 5.7+ -ALTER TABLE backtest_task DROP COLUMN IF EXISTS price_tolerance; -ALTER TABLE backtest_task DROP COLUMN IF EXISTS delay_seconds; -ALTER TABLE backtest_task DROP COLUMN IF EXISTS min_order_depth; -ALTER TABLE backtest_task DROP COLUMN IF EXISTS max_spread; -ALTER TABLE backtest_task DROP COLUMN IF EXISTS min_price; -ALTER TABLE backtest_task DROP COLUMN IF EXISTS max_price; -ALTER TABLE backtest_task DROP COLUMN IF EXISTS max_position_value; -ALTER TABLE backtest_task DROP COLUMN IF EXISTS max_market_end_date; +-- Check if columns exist before dropping (using standard approach) +ALTER TABLE backtest_task DROP COLUMN price_tolerance; +ALTER TABLE backtest_task DROP COLUMN delay_seconds; +ALTER TABLE backtest_task DROP COLUMN min_order_depth; +ALTER TABLE backtest_task DROP COLUMN max_spread; +ALTER TABLE backtest_task DROP COLUMN min_price; +ALTER TABLE backtest_task DROP COLUMN max_price; +ALTER TABLE backtest_task DROP COLUMN max_position_value; +ALTER TABLE backtest_task DROP COLUMN max_market_end_date;