2012-03-28 43 views
2

我需要的是有1,700记录我的表中添加的思维,狮身人面像三角柱,然后我需要索引字段。添加柱无故障时间

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

+0

您为什么认为需要一个小时才能更新?我刚刚在一个约3,400,000行的生产台上进行了测试。添加新列需要4.366毫秒,创建索引 - 8725.777毫秒。 – strkol 2012-03-28 14:58:47

回答

1

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

重命名表可以在事务中这样做,没有客户会注意到这一点(虽然这可能需要一些时间,因为我觉得RENAME将等待,直到它得到一个排它锁)。

您将不得不重新创建外键引用该表以及(约锁定参与该级别不知道)。

当然这只是如果你有足够的空间可以让你可以保持桌面的完整副本左右。

+0

以及在这种情况发生时没有人更新原始表 – xordon 2012-06-21 01:28:45