添加列没有停机时间

时间:2012-03-28 11:26:31

标签: postgresql thinking-sphinx

我需要在我的表中添加思考 - sphinx delta列,其中包含17Million记录,然后我需要索引该字段。

数据库是postgres并且添加列将导致一个小时的停机时间,这是不可能的,所以任何建议/想法如何表改变,所以整个表没有锁。

1 个答案:

答案 0 :(得分:1)

我能想到避免 long 表锁定的唯一解决方案是创建一个具有所需结构的新表。然后使用INSERT INTO ... SELECT填充该表,重新创建所有索引(包括新索引),然后将新表重命名为旧表。

重命名表可以在事务中完成,这样任何客户都不会注意到这一点(虽然这可能需要一些时间,因为我认为RENAME会等到它获得独占锁定)。

您还必须重新创建引用该表的外键(不确定其中涉及的锁定级别)。

这当然只有在你有足够的空间才能保存桌子的完整副本时才有可能。