This commit is contained in:
2026-03-07 03:16:20 +08:00
parent 7c29c9830b
commit 224de8bbde
+16 -23
View File
@@ -11,7 +11,6 @@
"""
import asyncio
import sys
import os
from pathlib import Path
project_root = Path(__file__).parent.parent
@@ -19,7 +18,7 @@ sys.path.insert(0, str(project_root))
sys.path.insert(0, str(project_root / "src"))
from sqlalchemy import text
from src.database.database import async_engine
from src.database.database import db_manager
from src.utils.logger import get_logger
logger = get_logger(__name__)
@@ -46,31 +45,17 @@ async def check_index_exists(conn, index_name: str) -> bool:
return result.fetchone() is not None
async def check_unique_constraint_exists(conn, table_name: str, column_name: str) -> bool:
"""检查唯一约束是否存在"""
result = await conn.execute(text("""
SELECT conname
FROM pg_constraint
WHERE conrelid = :table_name::regclass
AND contype = 'u'
AND conname LIKE :pattern
"""), {"table_name": table_name, "pattern": f"%{column_name}%"})
return result.fetchone() is not None
async def run_migration():
"""执行迁移"""
logger.info("开始数据库迁移 - 多上传支持...")
async with async_engine.begin() as conn:
try:
await conn.execute(text("SELECT 1"))
logger.info("数据库连接成功")
except Exception as e:
logger.error(f"数据库连接失败: {e}")
return False
await db_manager.connect()
async with async_engine.begin() as conn:
if not db_manager.is_connected:
logger.error("数据库连接失败")
return False
async with db_manager.engine.begin() as conn:
migration_steps = []
if not await check_column_exists(conn, "stp_files", "upload_batch"):
@@ -157,6 +142,7 @@ async def run_migration():
else:
logger.info("\n无需迁移,所有字段和索引已存在")
await db_manager.disconnect()
logger.info("数据库迁移完成!")
return True
@@ -165,7 +151,13 @@ async def rollback_migration():
"""回滚迁移"""
logger.info("开始回滚数据库迁移...")
async with async_engine.begin() as conn:
await db_manager.connect()
if not db_manager.is_connected:
logger.error("数据库连接失败")
return False
async with db_manager.engine.begin() as conn:
try:
if await check_index_exists(conn, "ix_stp_files_upload_batch"):
await conn.execute(text("DROP INDEX IF EXISTS ix_stp_files_upload_batch"))
@@ -196,6 +188,7 @@ async def rollback_migration():
logger.error(f"回滚失败: {e}")
return False
await db_manager.disconnect()
return True