[ Postgres ] テーブルをロックする ( 小姑が騒ぎだしたので )

Pocket

遠くから大きな声が聞こえてきます。いつもの小姑が騒いでいます。

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 の選択を責めることは私にはできませんし、きっと同じように対応します。

 

以上、本日のボヤキでした。

スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *