我期待添加multi-column index to a postgres数据库。我有一个非阻塞SQL命令来做到这一点,看起来像这样:django db_index迁移是否同时运行?
CREATE INDEX CONCURRENTLY shop_product_fields_index ON shop_product (id, ...);
当我添加db_index我的模型并进行迁移,将它也同时运行,还是会块写?是否可以在django中进行并发迁移?
我期待添加multi-column index to a postgres数据库。我有一个非阻塞SQL命令来做到这一点,看起来像这样:django db_index迁移是否同时运行?
CREATE INDEX CONCURRENTLY shop_product_fields_index ON shop_product (id, ...);
当我添加db_index我的模型并进行迁移,将它也同时运行,还是会块写?是否可以在django中进行并发迁移?
在Django中不支持PostgreSQL concurent索引创建。
这是门票请求此功能 - https://code.djangoproject.com/ticket/21039
但是相反,你可以手动迁移指定任何自定义RunSQL操作 - https://docs.djangoproject.com/en/1.8/ref/migration-operations/#runsql
使用Django 1.10迁移您可以通过使用创建并行索引RunSQL
,并通过将迁移中的atomic = False
设置为数据属性使迁移非原子化来禁用打包事务:
class Migration(migrations.Migration):
atomic = False # disable transaction
dependencies = []
operations = [
migrations.RunSQL('CREATE INDEX CONCURRENTLY ...')
]
啊,那是有助于了解。谢谢! – yekta
你不能在一个事务中运行'CREATE INDEX CONCURRENTLY',AFAIK Django总是在一个事务中运行迁移(至少在Postgres上)。 – Pankrat
@Pankrat 1.10将支持[非事务性迁移](https://code.djangoproject.com/ticket/25833),所以现在应该可以。 – rcoup