Вплив точки збереження на рівні ізоляції
Тепер, коли ви розібралися з точками збереження, скористаймося ними, щоб налаштувати серію транзакцій, яким усім потрібен один і той самий початковий знімок даних. REPEATABLE READ — це рівень ізоляції, який дає змогу кожному оператору всередині транзакції бачити ті самі дані, що й перший оператор, а не результат попередніх операторів.
Нещодавно FFEIC дозволила поступове обмеження іноземних депозитів — поле RCON2203 у тисячах — у наборі даних. Нові обмеження: 35% для сум понад $1 млрд, 25% для понад $500 млн і 13% для понад $300 млн. Можна впорядкувати ці оператори так, щоб уникнути багаторазового зменшення даних. Однак з REPEATABLE READ оператори бачать дані такими, якими вони були до будь-яких коригувань.
Ця вправа є частиною курсу
Транзакції та обробка помилок у PostgreSQL
Інструкції до вправи
- Запустіть транзакцію з
REPEATABLE READ. - Зменште
RCON2203на 35%, якщо сума понад $1 млрд; на 25%, якщо понад $500 млн; або на 13%, якщо понад $300 млн, встановлюючи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