2013-02-04 31 views
6

我已经得到了PostgreSQL 9.2和一个小数据库,只有一点我正在处理的网站的种子数据。在PostgreSQL的微型表上ALTER查询非常慢

下面的查询,似乎永远运行:

ALTER TABLE diagnose_bodypart ADD description text NOT NULL; 

diagnose_bodypart是不到10行的表。我让查询运行了一分钟而没有结果。可能是什么问题呢?任何建议调试这个?

+6

听起来像某种锁。你有没有连接打开访问(或访问)的表没有提交? –

+0

看看'pg_locks'视图。 –

+0

你是对的!有一些锁。我深入其中,并摆脱它们。以为,即使没有进一步的调查,人们可以通过数据库连接来关闭事情,并且应该释放锁。克雷格林格:感谢'pg_locks'提示。 –

回答

4

添加列不需要重写表格(除非指定DEFAULT)。这是一个快速操作,没有任何锁。克雷格指出,pg_locks是检查的地方。

一般来说,最可能的原因是长时间运行的交易。我会考虑什么样的工作流程正在触及这些表格以及交易持续多久。这种锁通常是事务性的,所以提交事务通常会解决这个问题。