我期待添加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