PostgreSQLi andmebaasis on võimalik kasutada lukustamist andmekirjete ning andmetabelite peal. Kuid lisaks saab kasutada ka soovituslikke lukke (advisory locks), mis on mõeldud kasutamiseks rakenduste tasemel - pg_advisory. Soovituslikud lukud ei ole seotud andmebaasis olevate andmetega - andmetabelite ega tabelikirjetega. Selle asemel saavad andmebaasi kasutavad rakendused ise defineerida lukustamiseks kasutatavad võtmed. Kuna lukustamise võtmed ei pea üheselt vastama andmetele andmebaasis on võimalik luua loogilisi lukustusmehanisme, mis toimivad kõrgemal abstraktsiooni tasemel. Näiteks saab luua luku, mis tagab, et korraga saab uuendada ainult ühe maakonna kasutajaid. Ise defineeritud lukud võivad osutuda väga kasulikuks tööriistaks "võistlusolukordade" lahendamisel (race-condition).
Lukkude tüübid
Sessiooni lukud
Lukke hoitakse kuni sessiooni lõpuni (ühendus andmebaasiga) või kui lukk vabastatakse käsitsi.
Transaktsiooni lukud
Lukk vabastatakse automaatselt kui andmebaasi transaktsioon lõppeb. Sellised lukud on enim kasutatud, kuna lukkude vabastamine toimub automaatselt koos transaktsioonide haldusega.
Eksklusiivsed või jagatud lukud
PostgreSQL pakub lukustamiseks jagatud või eksklusiivseid lukke. Eksklusiivsed lukud tähendavad, et kõik teised päringud, kes soovivad kas eksklusiivset või jagatud lukku, jäävad ootama. Jagatud lukk tähendab, et teised jagatud lukud saavad samamoodi juurdepääsu. Kuid eksklusiivse luku päring jääb ootama, kuni kõik jagatud lukud on vabastatud.
pg_advisory_xact_lock(key) — eksklusiivne
pg_advisory_xact_lock_shared(key) — jagatud
Kasutuse näide
BEGIN;
SELECT pg_advisory_xact_lock(12345);
-- siin saab teha lukustatud andmetega tööd
COMMIT; -- lukk vabastatakse automaatselt