分離レベルとトランザクション
SERIALIZABLE は、最初のクエリまたは更新文が発行された時点のレコードをスナップショットとして固定し、トランザクションの外でデータがどのように変更されてもエラーにする分離レベルです。なお、最初のクエリの前に、変数の宣言など他の処理を行うこともできます。
今回は FFIEC データセットを使い、貯蓄預金の年次変化 RCON0352 に大きなオフセットが影響しているデータを扱います。
この演習はコースの一部です
PostgreSQL におけるトランザクションとエラー処理
演習の手順
SERIALIZABLEモードでトランザクションを開始します。RCON0352が 100,000 を超えるすべてのレコードを、50% 減に更新します。- トランザクションを
COMMITします。 - 依然として
RCON0352が 100,000 を超えるレコード数を選択します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
-- Create a new transaction with a serializiable isolation level
___ TRANSACTION ISOLATION LEVEL ___;
-- Update records with a 50% reduction if greater than 100000
___ ffiec_reci
SET ___ = ___ * 0.5
WHERE RCON0352 > 100000;
-- Commit the transaction
___;
-- Select a count of records still over 100000
SELECT ___(RCON0352)
FROM ___
WHERE RCON0352 > 100000;