PostgreSQLでテーブルロックせずにインデックスを再構築する方法
PostgreSQLにはreindexコマンドがあるけれど、これはテーブルロックがかかってしまうので運用中のDBに対して使うのは難しい。ただ、PostgreSQLでは別名で全く同じインデックスの作成を行うことができるのでこれを利用して運用中のDBも止めずにインデックスの再構築をすることができる。別名インデックス作成時のロックはCONCURRENTRYオプションをつけることでロックをかけないようにして実施するのが肝。
CREATE INDEX CONCURRENTRY new_idx ON test(category); BEGIN; DROP INDEX test_category_idx; ALTER INDEX new_idx RENAME TO test_category_idx; COMMIT;
この方法*1はPostgreSQL9 Administration Cookbookに載っていただんだけど、この本すごくいい。どういう問題に対して、どうやるのか、どうやって動くのか、他にもこんなのもあるよといった感じで丁寧にわかりやすく解説されてる。今回はメンテナンス周りについて勉強したくて会社で買ってもらったんだけど、他にも今直面してる問題に対する対策とかたくさん載っててとても役立ちそう。洋書ではあるけどPostgreSQLな人は1冊持っておくといいんじゃないかな。
Postgresql 9 Administration Cookbook
- 作者: Simon Riggs,Hannu Krosing
- 出版社/メーカー: Packt Publishing
- 発売日: 2010/01/31
- メディア: ペーパーバック
- この商品を含むブログを見る
- [20120820]タイトルのtypoを修正、本文と表現を合わせた。