遠くから大きな声が聞こえてきます。いつもの小姑が騒いでいます。
A:「だ~か~ら~、このちょっとの瞬間に誰かが select して読み込んだ値を使ったらデータが矛盾しちゃうでしょ!! ロックがいるでしょ!!」
B:「え~、そのようなことは設計上ないのですがぁ」
A:「誰かが保守で読む取るとかあるでしょ!!」
B:「はぁ~、保守ですかぁ」
スポンサーリンク
テーブルをロック( select も許可しない )
今回は B が正しいです。A は引くこと、自らの間違いを認めない性格です。そのせいで、また1つ不要なロック処理が入ることになりました。A に 「 設計上ない 」 ということを理解させた上で認めさせることは時間の無駄と B は判断したようです。
ただし、ロックに罪はありません。select によるレコードの読み取りも許可しないようにするには、次の SQL を確認してください。テーブル名 ( table1 ) をロックしています。
LOCK TABLE table1 IN ACCESS EXCLUSIVE MODE;
テーブルの更新を行ってコミットするとテーブルのロックは自動で解除されます。アンロックを行う必要はありません。
テーブルのロック ( select は許可 )
次はテーブルの読み取りは許可するロックです。 単なる ACCESS ではロックしないように EXCLUSIVE だけを記述します。
LOCK TABLE table1 IN EXCLUSIVE MODE;
なお、こちらの場合もコミットするとテーブルのロックは解除されます。
ハッキリ言って、A のような人は研究・開発職には向きません。
また、お客様のためならない無駄な処理なんかやめるように A を説得して云々・・と考える方もいるとは思いますが、B の選択を責めることは私にはできませんし、きっと同じように対応します。
以上、本日のボヤキでした。