Kodulehed
[383] - Andmebaasid II (ITI0207) (sügis 2022)
Esiletöstetud Kiirvalik
Lisainfo Kõige olulisemate tegevuste kiirvalik. Failide saatmiseks valige Vastamine alt sobiv ülesanne.
Üldist
Materjalid
LisainfoMaterjalide kataloogid.
Värvilised mummud tähistavad hinnangulist kataloogide lugemise vajadust. Roheline - suurim, kollane - keskmine, punane või mummuta - väikseim
Isiklik
Lisainfo Info ainult Sulle - teised kasutajad seda ei näe
Abi
Lisainfo Võimalus küsida õppejõult abi (nagu foorum, kus saab küsida küsimusi ja kommenteerida vastuseid)
Mitmesugust
Abi / Kasutajatugi / PostgreSQL

Avalikud küsimused ja vastused:

Küsimuste teemade nimekiri

Anonüümne (12.12.2022 10:33):
Kas PostgreSQLis peaks vaate alampäringus kasutama SELECT ... FOR UPDATE?
Vastus (12.12.2022 10:37): Ei! Tõsi on see, et PostgreSQLis saab erinevalt Oraclest (12.1) vaate alampäringus kasutada SELECT ... FOR UPDATE. Siin kirjutatakse sellest pikemalt koos viitega laiendusel pgrowlocks, mis võimaldab hästi jälgida ridadele pandud lukke.

CREATE OR REPLACE VIEW Emp_all AS
SELECT *
FROM Emp INNER JOIN Dept USING (deptno) FOR UPDATE;

Kui nüüd keegi käivitab laused:

START TRANSACTION;
SELECT * FROM Emp_all;

, siis lukustatakse selle sessiooni jaoks eksklusiivselt kõik read tabelites Emp ja Dept. Teiste sõnadega, teistes sessioonides ei saa tabelites Emp ja Dept andmeid muuta, kuni selles sessioonis pole see transaktsioon lõppenud. See takistaks liiga palju andmebaasi samaaegset kasutamist erinevate kasutajate poolt ja pole seega soovitav. Seega SELECT .. FOR UPDATE vaates kasutama ei peaks.

SELECT ... FOR UPDATE tuleks näiteks kasutada rutiinides (nii eraldiseisvad kui trigeritega seotud) olevates kontrollpäringutes või andmemuudatuse lausete andmete kontrollimiseks mõeldud alampäringutes. Kui muudan andmeid tabelis A ja pean selleks kontrollima andmeid tabelist B, kuid samal ajal soovib keegi teine tabelis B neid samu kontrollimise aluseks olevaid andmeid muuta, siis tegemist on konfliktsete operatsioonidega, mis peaksid toimuma järjekorras, mitte samaaegselt. SELECT ... FOR UPDATE aitab seda saavutada.

Hinda vastust:

Keskmine hinne : Pole veel hinnanguid!