使用Django,我經常需要向PostgreSQL數據庫添加新的字段。這些字段通常有一個初始值,並且它們必須設置爲NOT NULL。我對這個過程包括三個步驟:向PostgreSQL數據庫添加一個新列,設置初始值並一次設置NOT NULL
1)添加字段,並設置初始值:
ALTER TABLE my_table ADD COLUMN my_field boolean;
UPDATE my_table SET my_field = FALSE;
2)設置NOT NULL:
ALTER TABLE my_table ALTER COLUMN my_field SET NOT NULL;
所有三個查詢不能一氣呵成運行,因爲這會導致PostgreSQL錯誤。
執行此任務的最有效方式是什麼?我想在單個查詢中完成此操作 - 並一次添加多個字段。沿着這些線:
ALTER TABLE my_table ADD COLUMN my_field boolean INITIAL FALSE SET NOT NULL, ADD COLUMN my_field2 boolean INITIAL FALSE SET NOT NULL;
由於Django不設置數據庫級的默認值,我在第二步中刪除這個。雖然這個序列看起來效率不如我原來的那麼高,但我更喜歡你的方式,因爲在我們大量使用的數據庫上創建一個字段後,我經常無法正確分配NOT NULL標誌。新的空值會被添加得太快...... – 2014-09-20 09:02:57