【せーぶぽいんと】

セーブポイント とは?

最終更新:
💡 途中に戻るための目印。トランザクション全部を捨てずにやり直す

トランザクションの途中に目印を付け、後の変更をその地点まで部分的に取り消す仕組み。コミットやバックアップとは異なり、トランザクション内で使う。

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

参考資料

← 用語集にもどる