【せーぶぽいんと】
セーブポイント とは?
最終更新:
💡 途中に戻るための目印。トランザクション全部を捨てずにやり直す
トランザクションの途中に目印を付け、後の変更をその地点まで部分的に取り消す仕組み。コミットやバックアップとは異なり、トランザクション内で使う。
📌 このページのポイント
- トランザクション内に名前付きの目印を設定する
- ROLLBACK TO SAVEPOINTで、その目印より後の変更を取り消す
- 目印を作るだけではコミットしない。後でトランザクション全体を取り消すこともできる
- PostgreSQLのRELEASE SAVEPOINTは目印を解放する。変更を確定するCOMMITとは別
セーブポイントはゲームのセーブと同じ?
普通のROLLBACKとはどう違う?
ROLLBACKはトランザクション全体を取り消す。ROLLBACK TO SAVEPOINTは目印より後の変更を取り消し、それ以前の変更を残して続けられるよ。例えば1を登録して目印を作り、2の登録を取り消してから3を登録し、COMMITすれば1と3が残るんだ
複数の目印を作ったり、不要なものを消したりできる?
PostgreSQLでは、トランザクション内に複数の名前付きセーブポイントを作れるよ。ROLLBACK TOである地点へ戻すと、その後の目印も消える。RELEASE SAVEPOINTは指定した目印と、その後の有効な目印を解放するけれど、それまでの変更は取り消さず、まだトランザクションの中に残るんだ
失敗した処理は全部なかったことにできる?
トランザクションで管理される変更の部分的な取り消しに使うものだよ。外部へのメール送信などまで自動で取り消す仕組みではない。PostgreSQLではカーソルの移動位置も元に戻らない場合がある。エラーの種類やDBMSの規則を確認し、戻った後の処理はアプリで決めよう
まとめ:ざっくりこれだけ覚えればOK!
「セーブポイント」って出てきたら「トランザクションの途中に戻る目印を置いて、部分的にやり直す仕組み」と思えばだいたいOK!
📖 おまけ:英語の意味
「Savepoint」 = 保存地点
💬 トランザクション内で戻れる地点を表す名前だよ。ゲームの中間地点にたとえられるけれど、終了後にも読み出せる保存ファイルとは違うんだ