この記事
https://gihyo.jp/dev/serial/01/db-academy/000102
について
"""
しかし,ログバッファ上に存在するデータが,もしディスク上のファイルへ反映される前に障害によって消えてしまった場合,そのデータは完全になくなり復旧できません。これは,ユーザが行ったはずの更新情報が消えるわけですから深刻です。
この問題は,DBMSが更新を非同期処理として行っている以上,必ず起きてしまいます。これを回避するため,DBMSはCOMMITのタイミングで必ず更新情報をログファイルへ書き込むことで,障害時のデータ整合性を担保するようにしています。逆に言うと,COMMIT時は同期処理のため,ここで遅延が発生する可能性があるのです。
"""
とありますが、PostgreSQLを使用した場合に通常はautocommitが有効になっていて自動的に文ごとにコミットされると書いてあったのですが、例えばこの機能を無効にしてCreate, Update, Deleteの処理を行う際にトランザクションを使用していなければログバッファからログファイルに更新情報が書き込まれずに、停電時などに整合性がとれなくなる可能性があるということでしょうか。もしそうであれば、この3つの操作をする際は必ずトランザクション内に入れなければならないという認識で良いのでしょうか。
あと、普通はないと思いますが
- トランザクション開始
- INSERT
- SELECT
...
のような場合、3番目のSELECT文は2番目のINSERTで追加した値はSELECTされる値に含まれるのでしょうか(同じテーブル)。
回答2件
あなたの回答
tips
プレビュー