2010-12-28 11 views
2

私は非常に大きくないテーブル "aaa"を持っています。それは10,000行未満です。しかし、この表の読み取り操作は非常に頻繁です。外部キー制約を追加するとテーブルがロックされます

"aaa"を指す外部キーを持つ新しいテーブル "bbb"を作成しようとするたびに。操作ロック、および "aaa"の読み込みはできません。クエリは決して終了しないようです。

ALTER TABLE "bbb" ADD CONSTRAINT "topic_id_refs_id_3942a46c6ab2c0b4" FOREIGN KEY ("topic_id") REFERENCES "aaa" ("id") DEFERRABLE INITIALLY DEFERRED; 

現時点での回避策は、オフピークの時間帯に新しいテーブルを作成することです。 dbを再起動した後の深夜。

これについて適切な解決策があるかどうかを知りたいと思います。これはすべてのリレーショナルデータベースに影響する問題ですか?私のdbはPostgreSQL 8.3です。

答えて

2

ALTER TABLEはテーブルロックを必要とするため、テーブルを読み取りに使用することはできません。あなたの問題はロックの問題のように聞こえますが、pg_stat_activityが何が起きているのかを確認してください。

Offtopic:深夜12時以降にデータベースを再起動するのはなぜですか?データベースを再起動することはありません。その必要はありません。

+0

ちょうど質問:ALTER TABLEはテーブル "bbb"で使用されます。まだテーブル "aaa"にロックがありますか? ALTER TABLEステートメントは両方のテーブルをロックしますか? – froeschli

+0

ええ、あなたがデータベースを再起動する必要がある場合、おそらく存在してはならない何らかの種類のロックを保持している接続が残っている可能性があります。 –

+0

はい。それは両方をロックします。 – kakarukeys

関連する問題