我需要在我的表中添加思考 - sphinx delta列,其中包含17Million记录,然后我需要索引该字段。
数据库是postgres并且添加列将导致一个小时的停机时间,这是不可能的,所以任何建议/想法如何表改变,所以整个表没有锁。
答案 0 :(得分:1)
我能想到避免 long 表锁定的唯一解决方案是创建一个具有所需结构的新表。然后使用INSERT INTO ... SELECT
填充该表,重新创建所有索引(包括新索引),然后将新表重命名为旧表。
重命名表可以在事务中完成,这样任何客户都不会注意到这一点(虽然这可能需要一些时间,因为我认为RENAME会等到它获得独占锁定)。
您还必须重新创建引用该表的外键(不确定其中涉及的锁定级别)。
这当然只有在你有足够的空间才能保存桌子的完整副本时才有可能。