PostgreSQL9.1データベースに次のfooテーブルがあるとします。
CREATE TABLE foo
(
bar integer,
flg_deleted boolean
);
このvwfooビューとともに:
CREATE VIEW vwfoo AS
SELECT bar
FROM foo
WHERE flg_deleted = false;
また、 vwfooを使用して、1秒あたり2、3の短期間のトランザクションを実行するアプリケーションがあるとします。
ここで、列bazをfooに追加し、 bazもvwfooに含めたいと思います。しかし、もちろん、これらの変更のためにアプリケーションでエラーが発生することは望ましくありません。
次の手順を(単一のトランザクションで)実行して、目的の変更を実行する場合:
- vwfooを削除します。
- 列bazをfooに追加します。
- vwfooを再度作成します(現在はbazを含みます)。
目的の動作が得られますか(アプリケーションにエラーはありません)?
トランザクション全体を通してvwfooに排他ロックが保持されますか(それが私が望むものです)?
トランザクションがステップ1と3の間のビューを使用しようとして失敗する可能性はありますか(単にブロックするのではなく、ロックを待つ)?
vwfooの「アイデンティティ」は、再作成されたときに変更されますか?言い換えると、トランザクションがステップ1と3の間でビューを使用しようとし、ブロックし、ステップ3の後に再開し、ビューが再作成されたために失敗する可能性はありますか?
ありがとう。