添加没有停机时间的列



我需要在有1700万条记录的表中添加thinking sphinx-delta列,然后我需要对该字段进行索引。

DB是postgres的,添加列将导致一个小时的停机时间,这是不可能的,所以任何关于如何更改表以使整个表没有锁的建议/想法。

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

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

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

当然,只有当你有足够的空间,这样你才能保留一份完整的表格。

最新更新