ÎncepețiÎncepe gratuit

Efectul unui savepoint asupra nivelurilor de izolare

Acum că ai explorat savepoint-urile, hai să le folosim pentru a configura o serie de tranzacții care trebuie să lucreze toate pe același snapshot inițial al datelor. REPEATABLE READ este un nivel de izolare care face ca fiecare instrucțiune din interiorul tranzacției să opereze pe aceleași date ca prima instrucțiune executată, nu pe datele rezultate în urma instrucțiunilor anterioare.

Recent, FFEIC a permis o reducere progresivă a depozitelor externe, câmpul RCON2203 în mii, din setul de date. Noua reducere este de 35% pentru valori mai mari de 1 miliard de dolari, 25% pentru mai mult de 500 de milioane de dolari și 13% pentru mai mult de 300 de milioane de dolari. Este posibil să ordonezi aceste instrucțiuni astfel încât datele să nu fie reduse de mai multe ori. Totuși, cu REPEATABLE READ, fiecare instrucțiune operează pe datele de dinaintea oricăror ajustări.

Acest exercițiu face parte din cursul

Tranzacții și gestionarea erorilor în PostgreSQL

Vezi cursul

Instrucțiuni pentru exercițiu

  • Pornește o tranzacție cu REPEATABLE READ.
  • Reduce RCON2203 cu 35% dacă valoarea depășește 1 miliard de dolari, cu 25% dacă depășește 500 de milioane de dolari sau cu 13% dacă depășește 300 de milioane de dolari, adăugând un SAVEPOINT după fiecare instrucțiune.
  • Închide tranzacția.
  • Calculează totalul câmpului RCON2203.

Exercițiu interactiv practic

Încearcă acest exercițiu completând acest cod de exemplu.

-- 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 
Editează și rulează codul