Postgres pro standard dokumentáció 9

A LOCK TABLE kap egy zárat az asztal szintjén, ha szükséges, várja meg az asztal felszabadulását más ütköző záraktól. Ha a NOWAIT meg van adva. A LOCK TABLE nem várja meg, amíg a tábla szabadon marad: ha a zár nem fogadható azonnal, a parancs megszakad és hiba keletkezik. A zár beérkezésekor az aktuális tranzakció befejezéséig tart. (Az UNLOCK TABLE parancs nem létezik, a zárolások mindig megjelennek a tranzakció végén.)

A táblákkal működő parancsok automatikus zárolásának kérésével a Postgres Pro mindig a legkevésbé korlátozó zárási módot választja. A LOCK TABLE utasítás olyan esetekre vonatkozik, ahol erősebb zárra van szükség. Tegyük fel például, hogy egy alkalmazás végrehajtja a tranzakciót a READ COMMITTED elszigetelési szinten, és változatlan adatokat kell kapnia az egész tranzakció során. Ennek elérése érdekében a táblázatban a SHARE módban zár lehet. mielőtt felhívta volna. Ennek eredményeképpen a párhuzamos adatmódosítások megszűnnek, és a későbbi leolvasások a rögzített adatok stabil ábrázolását eredményezik, mivel a SHARE lock mód ellentétes a ROW EXCLUSIVE zárolással. A SHOCK MODE LOCK TABLE neve meg fogja várni, amíg a ROW EXCLUSIVE zárolással végzett párhuzamos tranzakciók elköteleződnek vagy törlődnek. Így az ilyen zárolás megérkezésekor nem lesz nyitott zárolt írási művelet; Ezenkívül senki nem tud írni az asztalra, amíg a zárat eltávolítják.

Ha egy ilyen ügyletben táblázatban szeretné módosítani az adatokat, használja a SHARE ROW EXCLUSIVE zárolási módot a SHARE helyett. Ez az üzemmód biztosítja, hogy egyszerre csak egy ilyen típusú tranzakció kerül végrehajtásra. E korlátozás nélkül a holtpontlehetőség lehetséges: két tranzakció egyidejűleg SHARE zárolást kap. amely után nem tudják megszerezni a ROW EXCLUSIVE zárat. hogy végre hajtsa végre a változtatásokat. (Megjegyzendő, hogy a saját zár műveletre nem konfliktus, így a tranzakció szerezhet zár ROW EXCLUSIVE ő tulajdonában SHARE lock -. De nem akkor, amikor SHARE lock másik által tartott tranzakciót.) Annak elkerülése érdekében, a holtpontok, hogy minden tranzakció kér zár egy objektum ugyanabban a sorrendben, és ha egy objektum reteszelését különböző módokban kérték, az ügyletek mindig a legszigorúbb zárat kérik.

További információ a zárolási módokról és stratégiákról: 13.3. Szakasz.

A létező táblázatban szereplő név (esetleg egy séma kiegészítve), amelyhez zárolást kérnek. Ha az asztal neve meg van adva CSAK. csak a megadott táblázat blokkolva van. KIZÁRÓLAG nélkül a megadott táblázat blokkolva van, és minden leszármazottainak (ha vannak ilyenek). Az asztal neve után hozzáadhat egy opcionális * -ot is. hogy kifejezetten jelezze, hogy a zár minden gyermekasztalra hatással van.

A LOCK TABLE parancs a, b; egyenértékű a LOCK TABLE a sorozattal; LOCK TÁBLÁZAT b; A táblákat a LOCK TABLE parancsban megadott sorrendben egyenként zárolják. zárolási mód

A lezárási mód határozza meg, hogy mely blokkolás fog ezzel szemben szembesülni. A lezárási módokat a 13.3.

Ha a lezárási mód nincs megadva, a legszigorúbb módot alkalmazza, ACCESS EXCLUSIVE. nowait

Azt jelzi, hogy a LOCK TABLE nem várhatja meg az ütköző zárak feloldását: ha a kért zár nem érhető el azonnal, a tranzakció megszakad.

LOCK TÁBLÁZAT. A HOZZÁFÉRHETŐ SHARE MODE-ban meg kell adni a SELECT engedélyt a céltáblában. LOCK TÁBLÁZAT. A ROW EXCLUSIVE MODE INSERT jogokat igényel. UPDATE. TÖRLÉS vagy TRUNCATE a céltáblázathoz. A LOCK minden más formája UPDATE-ot igényel. TÖRLÉS vagy TRUNCATE az asztal szintjén.

A tranzakciós blokkon kívül a LOCK TABLE parancs használhatatlan: a zár mindaddig megmarad, amíg a tranzakció befejeződik. Ezért a Postgres Pro hibát okoz, amikor a LOCK-ot nem a tranzakciós blokkban próbálja alkalmazni. A tranzakciós blokk meghatározásához használja a BEGIN és COMMIT (vagy ROLLBACK) elemet.

A LOCK TABLE csak zárolásokat tud beállítani az asztal szintjén, ezért a ROW (string) szó szerepelnek minden olyan módnevet illetően, amelyek nem teljesen helyesek. Olyan módon kell kezelnie őket, hogy ezeken a módokon a felhasználó a blokkolt sorszintű zárolási táblázatban kíván fogadni. Ezenkívül vegye figyelembe, hogy a ROW EXCLUSIVE módban megosztott asztalzár van beállítva. Ne feledje, hogy a LOCK TABLE gombbal minden zárási mód ugyanúgy működik, csak azok a szabályok, amelyek meghatározzák, hogy melyik móddal ütközik. Ha szeretne megtudni, hogyan lehet zárolást kapni a sor szintjén, olvassa el a 13.3.2. Alfejezetet és a SELECT súgó blokkolását.

Az asztal elsődleges kulcsához tartozó SHARE zárolás megszerzése a gyermektáblába való belépéskor:

A SHARE ROW EXCLUSIVE rögzítése az elsődleges kulcs táblában a törlési művelet végrehajtása előtt:

kompatibilitás

A LOCK TABLE parancs nincs az SQL szabványban, ebben a tranzakcióelkülönítési szintet a SET TRANSACTION parancs határozza meg. A Postgres Pro támogatja ezt a lehetőséget is; Ezt részletesebben a SET TRANSACTION című fejezetben ismertetjük.

Az ACCESS SHARE kivételével. AZ EXKLUZÍCIÓHOZ VALÓ HOZZÁFÉRÉS ÉS AZ EXKLUZÍV FELHASZNÁLÁS. a Postgres Pro és a LOCK TABLE szintaxis zárolási módjai kompatibilisek az Oracle DBMS rendszerrel.