Webエンジニアの森脇です。 PostgreSQLで、サービス稼働中に安易にALTER TABLE等を実行すると、ダウンタイムに繋がることがあります。安全にテーブル定義を変更するために、弊社で気をつけている点を紹介します。 なお、本記事の内容は PostgreSQL 9.5.4 環境で確認しています。 PostgreSQLのロックについて 参照のみのテーブルに対して、ALTER TABLEを実行した場合でもダウンタイムに繋がることがあります。原因について理解するために、PostgreSQLのロックについて簡単に紹介します。 PostgreSQLでは、SELECTでも「ACCESS SHARE」というロックを獲得します。最も弱いロックですが、ALTER TABLE等で獲得される「ACCESS EXCLUSIVE」というロックと競合します。 これは、他のトランザクションでSELECTしているテ
![PostgreSQLで安全にテーブル定義を変更する - LCL Engineers' Blog](https://cdn-ak-scissors.b.st-hatena.com/image/square/06a15c64ba0ceec233d86d71001ebb29a9dcbf5d/height=288;version=1;width=512/https%3A%2F%2Fcdn.blog.st-hatena.com%2Fimages%2Ftheme%2Fog-image-1500.png)