我有一個包含數百萬條記錄的postgres表。現在我想用名爲「time_modified」的另一列「last_event_time」中的值添加新列。運行遷移腳本需要很長時間,因此需要一個簡單的解決方案來運行生產。Postgres:如何在更改表格時將列默認值設置爲另一列值
回答
假設列是時間戳你可以試試:
alter table my_table add time_modified text;
alter table my_table alter time_modified type timestamp using last_event_time;
更新是否更高效? 「alter table」在表上使用獨佔鎖,而更新至少允許在更新運行時從中進行選擇。 –
這取決於服務器負載和其他客戶端。一旦我們獲得鎖定,操作應該比更新快得多。我會在週日凌晨4點這樣做;) – klin
感謝klin。這個解決方案比更新更好,但只關心鎖定表。有沒有更好的選擇? –
我建議用pg_sleep
使用功能,這在環路之間iteriation等待
這樣不調用專用鎖等鎖住your_table。
SELECT pg_sleep(seconds);
執行的時間不過長
alter table my_table add time_modified timestamp;
CREATE OR REPLACE FUNCTION update_mew_column()
RETURNS void AS
$BODY$
DECLARE
rec record;
BEGIN
for rec in (select id,last_event_time from your_table) loop
update your_table set time_modified = rec.last_event_time where id = rec.id;
PERFORM pg_sleep(0.01);
end loop;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
和執行功能:
select update_mew_column();
這隻會增加鎖的持續時間。 –
- 1. SQLAlchemy將一列的默認值設置爲另一列的默認值
- 2. SQLAlchemy爲postgres JSON列設置默認值
- 3. 如何將下拉列表默認值更改爲另一個值
- 4. 如何將文件的默認值更改爲另一個值?
- 5. 設置列的默認值:另一列的值
- 6. 在INSERT語句中將一列的默認值設置爲另一列
- 7. 如何將默認值更改爲SQL中表中的列?
- 8. 如何將默認值設置爲C#中的下拉列表?
- 9. 如何將默認值設置爲下拉列表控件?
- 10. 如何將默認值設置爲列表視圖
- 11. 如何將一列的默認值設置爲GUID?
- 12. 如何在SQL Server 2005中爲另一個表中的列設置默認值
- 13. 在Rails中爲Postgres JSON列設置默認值<4
- 14. 如何將列值更改爲SUB_STRING另一列的值autoatically
- 15. 更改列的默認值
- 16. sqlite3更改列默認值
- 17. 如何將默認值設置爲現有行,同時將具有默認值的新列添加到表
- 18. 如何在SQL Server中爲所有表列設置默認值?
- 19. 如何設置列的默認值?
- 20. Mysql的更改表添加列和設置默認值
- 21. 在Google Spreadsheet中將項目列表設置爲默認值
- 22. 將該列的值設置爲NULL值的默認值
- 23. 更改設置值的默認值
- 24. 如何設置Angular.js表單的默認值和可更改值
- 25. 如何將列B的默認值設置爲posgresql中列A的值?
- 26. 繪製柵格時將par()設置更改爲默認設置
- 27. 設置默認值列表框
- 28. 無法將默認值設置爲INT(11)更改表
- 29. 如何將表格字段的默認值設置爲0.00?
- 30. 如何將form2設置爲默認值?
沒有 「單純」 的解決方案。唯一的方法是在添加列後運行'update'。 –
你怕別人過程阻擋表嗎? –
由於數據庫對於客戶端應用程序至關重要,所以不能長時間鎖定表格 –