【发布时间】:2015-09-23 17:10:39
【问题描述】:
我想编写一个数据迁移,在其中我以较小的批量修改大表中的所有行,以避免锁定问题。但是,我不知道如何在 Django 迁移中手动提交。每次我尝试运行 commit 我都会得到:
TransactionManagementError:当“原子”块处于活动状态时,这是禁止的。
AFAICT,database schema editor always wraps Postgres migrations 中的 atomic block。
有没有一种理智的方法可以从迁移中中断事务?
我的迁移如下所示:
def modify_data(apps, schema_editor):
counter = 0
BigData = apps.get_model("app", "BigData")
for row in BigData.objects.iterator():
# Modify row [...]
row.save()
# Commit every 1000 rows
counter += 1
if counter % 1000 == 0:
transaction.commit()
transaction.commit()
class Migration(migrations.Migration):
operations = [
migrations.RunPython(modify_data),
]
我正在使用 Django 1.7 和 Postgres 9.3。这曾经适用于南版和旧版本的 Django。
【问题讨论】:
标签: django postgresql database-migration