我有一个包含数百万条记录的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'。 –
你怕别人过程阻挡表吗? –
由于数据库对于客户端应用程序至关重要,所以不能长时间锁定表格 –