Comanda SET TRANSACTION stabilește caracteristicile tranzacției curente. La tranzacțiile ulterioare, nu afectează. SET CARACTERISTICI SESIUNE stabileste caracteristicile tranzactiei implicite pentru tranzactiile ulterioare in cadrul sesiunii. Caracteristicile implicite pot fi apoi ignorate pentru tranzacțiile individuale prin comanda SET TRANSACTION.
Izolarea tranzacțiilor, modul de acces la tranzacții (citire / scriere sau numai citire) și permisiunea amânării acesteia sunt legate de caracteristicile tranzacției. În plus, puteți selecta un instantaneu, dar numai pentru tranzacția curentă, nu pentru sesiunea implicită.
Nivelul de izolare a tranzacțiilor determină ce date se poate vedea o tranzacție atunci când alte tranzacții rulează în paralel cu aceasta:
Operatorul vede numai liniile care au fost fixate înainte de începerea execuției. Acest nivel este setat implicit. REPEATABLE READ
Toți operatorii tranzacției curente văd numai acele rânduri care au fost angajate înainte de prima cerere de eșantionare sau de modificare a datelor efectuate în această tranzacție. serializabil
Toate declarațiile de tranzacție poate vedea doar rândurile care au fost înregistrate înainte de prima cerere pentru o probă sau de date modificările efectuate în această tranzacție. În cazul în care impunerea de concurente operațiuni de citire și scriere de tranzacții serializabilă ar putea duce la o situație, este imposibil cu punerea în aplicare secvențială (atunci când o tranzacție este efectuată pentru o alta), vor fi rulate înapoi unul din eroare tranzacții serialization_failure (eșec serializarea).
În standardul SQL, este definit un alt nivel, CITIȚI UNCOMMITAT. În Postgres Pro, nivelul READ UNCOMMITTED este tratat ca READ COMMITTED.
Proprietatea DEFERRABLE afectează numai dacă tranzacția este, de asemenea, în modurile SERIALIZABLE și READ ONLY. Când toate aceste trei proprietăți sunt setate pentru o tranzacție, tranzacția poate fi blocată pentru prima dată când preluați instantaneul datelor, după care poate fi executat fără efortul suplimentar obișnuit pentru modul SERIALIZABLE. și fără riscul de a nu serializa sau de a suferi de ea. Acest mod este potrivit pentru operațiuni lungi, de exemplu pentru construirea de rapoarte sau de rezervă.
Dacă comanda SET TRANSACTION nu precede START TRANSACTION sau BEGIN. ea emite un avertisment și nu face nimic altceva.
Fără SET TRANSACȚIE, puteți accesa prin specificarea modurilor de tranzacție necesare în operatorii BEGIN sau START TRANSACTION. Dar pentru SNAPSHOT SET TRANSACTION această posibilitate nu este furnizată.
Mod de tranzacție pentru sesiunea implicită, puteți seta, de asemenea, în variabilele de configurare default_transaction_isolation. default_transaction_read_only și default_transaction_deferrable. (În practică, SET SESSION CARACTERISTICI - este doar alternativă mai verbose pentru a modifica aceste variabile comanda SET.) Aceasta înseamnă că valoarea variabilelor implicite pot fi setate în fișierul de configurare folosind comanda ALTER DATABASE, etc Pentru mai multe informații, consultați .. capitolul 20.
Pentru a începe o nouă tranzacție cu un instantaneu al datelor pe care le primește tranzacția existentă, trebuie mai întâi să fie exportată din prima tranzacție. Identificarea imaginii este obținută, de exemplu:
Apoi, identificatorul este necesar pentru a transfera comanda SET TRANSACTION INSTANT la începutul unei noi tranzacții:
compatibilitate
Aceste comenzi sunt definite în standardul SQL. cu excepția modului de tranzacție DEFERRABLE și a formularului SET TRANSACTION SNAPSHOT. care sunt extensii ale Postgres Pro.
În standard, nivelul de izolare implicit este SERIALIZABLE. În Postgres Pro, nivelul implicit este de obicei CITIȚI ÎNCHEIAT. dar o puteți schimba așa cum este descris mai sus.
În standard SQL, există o altă caracteristică a tranzacției, care nu poate fi stabilită prin aceste comenzi: dimensiunea zonei de diagnosticare. Acest concept specific de SQL încorporat, deci nu este implementat în serverul Postgres Pro.
Standardul SQL cere ca modurile tranzacționale seriale să fie separate prin virgule, dar din motive istorice, Postgres Pro vă permite să omiteți virgulele.