Auswirkung von Savepoints auf Isolationsstufen
Nachdem du Savepoints kennengelernt hast, setzen wir sie jetzt ein, um eine Reihe von Transaktionen aufzubauen, die alle mit demselben anfänglichen Snapshot der Daten arbeiten müssen. REPEATABLE READ ist eine Isolationsstufe, die dafür sorgt, dass jede Anweisung innerhalb der Transaktion mit denselben Daten arbeitet wie die erste Anweisung, statt mit den durch vorherige Anweisungen veränderten Daten.
Kürzlich erlaubte die FFEIC eine gestaffelte Kürzung der Auslandseinlagen, Feld RCON2203 (in Tausend), im Datensatz. Die neue Kürzung beträgt 35 % für mehr als 1 Mrd. US-Dollar, 25 % für mehr als 500 Mio. US-Dollar und 13 % für mehr als 300 Mio. US-Dollar. Es ist möglich, die Anweisungen so zu sortieren, dass die Daten nicht mehrfach reduziert werden. Mit REPEATABLE READ sehen die Anweisungen jedoch die Daten vor jeglichen Anpassungen.
Diese Übung ist Teil des Kurses
Transaktionen und Fehlerbehandlung in PostgreSQL
Anleitung zur Übung
- Starte eine Transaktion mit
REPEATABLE READ. - Reduziere
RCON2203um 35 % bei mehr als 1 Mrd. US-Dollar, um 25 % bei mehr als 500 Mio. US-Dollar oder um 13 % bei mehr als 300 Mio. US-Dollar und setze nach jeder Anpassung einenSAVEPOINT. - Schließe die Transaktion ab.
- Summiere das Feld
RCON2203auf.
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
-- 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