Kas ja miks peab rutiinis või trigeris kasutama SELECT ... FOR UPDATE?

Postitas Erki Eessaar
Kas ... FOR UPDATE on vajalik sõltub kõigepealt kasutatavast andmebaasisüsteemist. PostgreSQLis ja Oracles on SELECT ... FOR UPDATE vaja kasutada siis, kui teete trigeri protseduuris või lihtsalt rutiinis mingi tingimuse kontrolliks päringu (SELECT lause) teise tabelisse või ka sama tabeli teiste ridade põhjal. Sellega tagate, et kui andmed, mille põhjal kontrolli teete, on parajasti muutmisel, siis jätkub Teie trigeri või rutiini töö alles siis, kui see muutmine on lõppenud ja on selge, millised on uued andmed. Lihtsalt SELECT seda ei taga, sest nii Oracle kui PostgreSQL kasutavad multiversioon-konkurentsjuhtimist (MVCC, multi-version concurrency control) ning andmete muutmine/kustutamine ei blokeeri nende samaaegset lugemist. SELECT ... FOR UPDATE üritab panna loetud ridadele eksklusiivse luku ja see ebaõnnestub, kui need read on juba eksklusiivselt lukustatud, st keegi parajasti muudab neid.

Hinda postitust:

Keskmine hinne : Pole veel hinnanguid!