セーブポイントが分離レベルに与える影響
セーブポイントを確認したところで、同じ初期スナップショットから動作する一連のトランザクションを設定してみましょう。REPEATABLE READ は、トランザクション内の各文に対して、直前の文の結果ではなく、最初の文が処理したのと同じデータを見せることができる分離レベルです。
最近、FFEIC はこのデータセットで、海外預金(フィールド RCON2203、単位は千ドル)を段階的に縮小できるようにしました。新しい縮小率は、10億ドル超で35%、5億ドル超で25%、3億ドル超で13%です。文の順序を工夫すれば、同じデータを二重に減らすことは避けられます。しかし、REPEATABLE READ では各文は調整前のデータを参照します。
この演習はコースの一部です
PostgreSQL におけるトランザクションとエラー処理
演習の手順
REPEATABLE READのトランザクションを開始します。RCON2203を、10億ドル超なら35%、5億ドル超なら25%、3億ドル超なら13% 減らし、それぞれの更新後にSAVEPOINTを設定します。- トランザクションを終了します。
RCON2203フィールドを合計します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
-- Create a new transaction with a repeatable read isolation level
___ TRANSACTION ISOLATION LEVEL ___ ___;
-- Update records with a 35% reduction if greater than 1000000000
UPDATE ffiec_reci
SET ___ = CAST(___ AS FLOAT) * .65
WHERE CAST(RCON2203 AS FLOAT) > 1000000000;
___ million;
-- Update records with a 25% reduction if greater than 500000000
UPDATE ___
___ ___ = CAST(___ AS FLOAT) * .75
___ CAST(RCON2203 AS FLOAT) ___ 500000000;
SAVEPOINT five_hundred;
-- Update records with a 13% reduction if greater than 300000000
___ ffiec_reci
___ ___ = CAST(___ AS FLOAT) * .87
___ CAST(___ AS FLOAT) ___ 300000000;
SAVEPOINT three_hundred;
-- Commit the transaction
___;
-- Select SUM the RCON2203 field
SELECT ___(CAST(RCON2203 AS FLOAT))
FROM ffiec_reci