【せーぶぽいんと】
セーブポイント とは?
💡 ゲームのセーブと同じ!失敗したらここからやり直し
📌 このページのポイント
セーブポイントって、RPGのセーブみたいなもの?
まさにそのイメージ!トランザクションの途中に「ここまではOK」っていう目印を置いておけるんだ。失敗したらその地点まで戻ってやり直せるよ
普通のロールバックと何が違うの?
普通のROLLBACKはトランザクション全体を最初まで巻き戻すけど、ROLLBACK TO SAVEPOINTはセーブポイントの位置まで部分的に戻せるんだ。100件中50件目でエラーが出ても、セーブポイントから再開できるよ
セーブポイントは何個でも置けるの?
何個でも置けるよ。名前を付けて管理するんだ。たとえば `SAVEPOINT step1` `SAVEPOINT step2` みたいに段階的に設定して、任意の段階まで戻れるよ
どんなときに使うと便利なのかな?
バッチ処理で大量のデータを1トランザクションで処理するとき、途中でエラーが出ても最初からやり直さなくていいから重宝するよ。あとはストアドプロシージャのエラーハンドリングで「この処理が失敗したらここまで戻す」って書くのにも使うね
使うときの注意点はある?
セーブポイントを大量に作るとメモリを消費するから注意が必要だよ。あと、RELEASE SAVEPOINTで不要になったセーブポイントを解放するのも大事だね。PostgreSQLではサブトランザクションとして実装されていて、大量のセーブポイントはロック管理のオーバーヘッドが増えるから、本番環境では慎重に使おうね
まとめ:ざっくりこれだけ覚えればOK!
「セーブポイント」って出てきたら「トランザクションの途中に中間セーブを置いて部分的にやり直せる仕組み」と思えばだいたいOK!
📖 おまけ:英語の意味
「Savepoint」 = 保存地点
💬 ゲームのセーブポイントと同じ発想で、途中の状態を保存しておく地点のことだよ