2013-02-04 21 views
6

私は、PostgreSQL 9.2と、私が取り組んでいるウェブサイトのシードデータのちょっとした小さなデータベースを持っています。PostgreSQLの小さなテーブルでALTERクエリが非常に遅い

次のクエリは永遠に実行するようだ:

ALTER TABLE diagnose_bodypart ADD description text NOT NULL; 

diagnose_bodypartは、10未満の行を持つ表です。私は結果が1分以上にわたってクエリを実行させるようにしました。何が問題なの?これをデバッグするための推奨事項はありますか?

+6

ロックのような音がします。コミットせずにテーブルにアクセスする(またはアクセスした)接続が開いていますか? –

+0

'pg_locks'ビューを見てください。 –

+0

あなたはそうです!いくつかのロックがありました。私はそれにさらに入り、それらを取り除いた。思考は、さらに問い合わせなくても、データベース接続で物事を閉じてロックを解除することができます。 Craig Ringer: 'pg_locks'のおかげです。 –

答えて

4

カラムを追加しても、テーブルを書き換える必要はありません(DEFAULTを指定しない限り)。ロックがないとすばやく操作できます。 Craigが指摘したように、pg_locksはチェックする場所です。

一般的には、実行時間の長いトランザクションが原因です。私はこれらのテーブルに何が流れているのか、そして取引がどれくらい長く開いているのかを見ていきます。通常、この種のロックはトランザクション型であるため、トランザクションをコミットすると通常は問題が解決されます。

関連する問題