fix: 修复数据迁移中的事务处理,确保每张表的迁移在独立事务中进行
This commit is contained in:
@@ -663,20 +663,21 @@ class DatabaseMigrator:
|
|||||||
self._drop_target_tables()
|
self._drop_target_tables()
|
||||||
|
|
||||||
# 开始迁移
|
# 开始迁移
|
||||||
with self.source_engine.connect() as source_conn, self.target_engine.connect() as target_conn:
|
with self.source_engine.connect() as source_conn:
|
||||||
for source_table in tables:
|
for source_table in tables:
|
||||||
try:
|
try:
|
||||||
# 在目标库中创建表结构
|
# 在目标库中创建表结构
|
||||||
target_table = copy_table_structure(source_table, MetaData(), self.target_engine)
|
target_table = copy_table_structure(source_table, MetaData(), self.target_engine)
|
||||||
|
|
||||||
# 迁移数据
|
# 每张表单独事务,避免退出上下文被自动回滚
|
||||||
migrated_rows, error_count = migrate_table_data(
|
with self.target_engine.begin() as target_conn:
|
||||||
source_conn,
|
migrated_rows, error_count = migrate_table_data(
|
||||||
target_conn,
|
source_conn,
|
||||||
source_table,
|
target_conn,
|
||||||
target_table,
|
source_table,
|
||||||
batch_size=self.batch_size,
|
target_table,
|
||||||
)
|
batch_size=self.batch_size,
|
||||||
|
)
|
||||||
|
|
||||||
self.stats["tables_migrated"] += 1
|
self.stats["tables_migrated"] += 1
|
||||||
self.stats["rows_migrated"] += migrated_rows
|
self.stats["rows_migrated"] += migrated_rows
|
||||||
|
|||||||
Reference in New Issue
Block a user