Låser
eller Eksklusive Låser
eller Skriv Låser
hindre brukere i å endre en rad eller en hel tabell. Rader modifisert av UPDATE og DELETE er så eksklusivt låses automatisk for durationof transaksjonen. Dette forhindrer at andre brukere kan endre rad før transaksjonen er enten begått eller rulles tilbake.
Den eneste gangen når brukere må vente for andre brukere er når de prøver å endre den samme rad. Hvis de endrer forskjellige rader, er ingen ventetid nødvendig. SELECT spørringer trenger aldri å vente.
Databasen utfører låsing automatisk. I visse tilfeller kan imidlertid låse må styres manuelt. Manuell låsing kan gjøres ved hjelp av LOCK kommandoen. Den tillater spesifisering av en transaksjon lås type og omfang
Syntax for LOCK kommando
Den grunnleggende syntaks LOCK kommandoen for er som følger:.
LOCK [TABLE] navn INlock_mode
< p> navn Bilde: Navnet (eventuelt skjema kvalifisert) av en eksisterende tabell for å låse. Hvis bare angis før tabellen navn, er bare at bordet låst. Hvis bare ikke er angitt, blir bordet og alle dens etterkommer tabeller (hvis noen) låst
lock_mode Bilde:. Låsen modus angir hvilke låser denne låsen i konflikt med . Hvis ingen lock-modus er spesifisert, så ACCESS EXCLUSIVE, mest restriktiv, blir brukt. Mulige verdier er:. ACCESS SHARE, ROW SHARE, ROW EXCLUSIVE, DEL UPDATE EXCLUSIVE, DEL, DEL ROW EXCLUSIVE, EXCLUSIVE, ACCESS EXCLUSIVE
Når innhentet, er låsen holdt for resten av inneværende transaksjon. Det er ingen UNLOCK TABLE kommandoen; låser er alltid sluppet på transaksjons slutten.
vranglås
Vranglåser kan oppstå når to transaksjoner venter på hverandre for å avslutte sine operasjoner. Mens PostgreSQL kan oppdage dem og avslutte dem med en tilbakeføring, kan vranglås fortsatt være upraktisk. For å hindre at programmer fra å kjøre inn i dette problemet, sørg for å designe dem på en slik måte at de vil låse objekter i samme rekkefølge.
Advisory Låser
PostgreSQL gir et middel for å skape låser som har applikasjonsdefinert betydninger. Disse kalles rådgivnings låser
. Som systemet ikke håndheve deres bruk, er det opp til at programmet skal bruke dem riktig. Advisory låser kan være nyttig for å låse strategier som er en vanskelig plass for MVCC modell.
For eksempel, er en vanlig bruk av rådgivende sluser for å etterligne pessimistiske låsestrategier typisk for såkalte "flat fil" data styringssystemer . Mens et flagg lagres i en tabell kan brukes til samme formål, rådgivende låser er raskere, unngå bord bloat, og blir automatisk ryddet opp av serveren på slutten av økten.
Eksempel
< p> Tenk bordet COMPANY ha poster som følger:
testdb # select * from COMPANY; id | Navn | alder | adressere | lønn ---- + ------- + ----- + ----------- + -------- 1 | Paul | 32 | California | 20000 2 | Allen | 25 | Texas | 15000 3 | Teddy | 23 | Norge | 20000 4 | Mark | 25 | Rich-Mond | 65000 5 | David | 27 | Texas | 85000 6 | Kim | 22 | Sør-Hall | 45000 7 | James | 24 | Houston | 10000 (7 p)
Følgende eksempel låser COMPANY bordet innen testdb database i Access eksklusiv modus. LOCK uttalelse fungerer bare i en transaksjon modus:
testdb = # BEGIN; LOCK TABLE company1 i Access eksklusiv modus;
Over PostgreSQL uttalelse vil produsere følgende resultat:
LOCK TABLE
Listen meldingen angir at tabellen er låst inntil transaksjonen avsluttes og å fullføre transaksjonen må du enten tilbakeføring eller begår transaksjonen.