日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

SET TRANSACTION

SET TRANSACTION命令設置當前會話的特性。

簡介

SET SESSION CHARACTERISTICS設置一個會話后續事務的默認事務特性。在個體事務中可以用 SET TRANSACTION覆蓋這些默認值。

可用的事務特性是事務隔離級別、事務訪問模式(讀/寫或只讀)以及可延遲模式。此外,可以選擇一個快照,不過只能用于當前事務而不能作為會話默認值。

一個事務的隔離級別決定當其他事務并行運行時該事務能看見什么數據:

  • READ COMMITTED一個語句只能看到在它開始前提交的行。這是默認值。

  • REPEATABLE READ當前事務的所有語句只能看到這個事務中執行的第一個查詢或者數據修改語句之前提交的行。

  • SERIALIZABLE當前事務的所有語句只能看到這個事務中執行的第一個查詢或者數據修改語句之前提交的行。如果并發的可序列化事務間的讀寫模式可能導致一種那些事務串行(一次一個)執行時不可能出現的情況,其中之一將會被回滾并且得到一個 serialization_failure錯誤。

SQL 標準定義了一種額外的級別:READ UNCOMMITTED。在 PolarDB中READ UNCOMMITTED被視作 READ COMMITTED

一個事務執行了第一個查詢或者數據修改語句( SELECTINSERTDELETEUPDATEFETCHCOPY)之后就無法更改事務隔離級別。

事務的訪問模式決定該事務是否為讀/寫或者只讀。讀/寫是默認值。當一個事務為只讀時,如果 SQL 命令INSERTUPDATEDELETECOPY FROM要寫的表不是一個臨時表,則它們不被允許。不允許CREATEALTER以及DROP命令。不允許COMMENTGRANTREVOKETRUNCATE。如果EXPLAIN ANALYZEEXECUTE要執行的命令是上述命令之一,則它們也不被允許。這是一種高層的只讀概念,它不能阻止所有對磁盤的寫入。

只有事務也是SERIALIZABLE以及READ ONLY時,DEFERRABLE事務屬性才會有效。當一個事務的所有這三個屬性都被選擇時,該事務在第一次獲取其快照時可能會阻塞,在那之后它運行時就不會有SERIALIZABLE事務的開銷,并且不會有任何犧牲或者被一次序列化失敗取消的風險。這種模式很適合于長時間運行的報表或者備份。

SET TRANSACTION SNAPSHOT命令允許新的事務使用與一個現有事務相同的快照運行。已經存在的事務必須已經把它的快照用pg_export_snapshot函數導出。 該函數會返回一個快照標識符,SET TRANSACTION SNAPSHOT需要被給定一個快照標識符來指定要導入的快照。 在這個命令中該標識符必須被寫成一個字符串,例如 '000003A1-1'SET TRANSACTION SNAPSHOT只能在一個事務的開始執行,并且要在該事務的第一個查詢或者數據修改語句( SELECTINSERTDELETEUPDATEFETCHCOPY)之前執行。此外,該事務必須已經被設置為SERIALIZABLE或者 REPEATABLE READ隔離級別(否則,該快照將被立刻拋棄, 因為READ COMMITTED模式會為每一個命令取一個新快照)。 如果導入事務使用了SERIALIZABLE隔離級別,那么導入快照的事務必須也使用該隔離級別。還有,一個非只讀可序列化事務不能導入來自只讀事務的快照。

語法

    SET TRANSACTION transaction_mode [, ...]
    SET TRANSACTION SNAPSHOT snapshot_id
    SET SESSION CHARACTERISTICS AS TRANSACTION transaction_mode [, ...]

    其中 transaction_mode 是下列之一:

        ISOLATION LEVEL { SERIALIZABLE | REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED }
        READ WRITE | READ ONLY
        [ NOT ] DEFERRABLE

說明

  • 如果執行SET TRANSACTION之前沒有 START TRANSACTION或者 BEGIN,它會發出一個警告并且不會有任何效果。

  • 可以通過在BEGIN或者START TRANSACTION中指定想要的transaction_modes來省掉 SET TRANSACTION。但是在 SET TRANSACTION SNAPSHOT中該選項不可用。

  • 會話默認的事務模式也可以通過設置配置參數 default_transaction_isolation、 default_transaction_read_only 和 default_transaction_deferrable 來設置(實際上 SET SESSION CHARACTERISTICS只是用 SET設置這些變量的等效體)。這意味著可以通過配置文件、 ALTER DATABASE等方式設置默認值。

示例

要用一個已經存在的事務的同一快照開始一個新事務,首先要從該現有事務導出快照。這將會返回快照標識符,例如:

    BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ;
    SELECT pg_export_snapshot();
     pg_export_snapshot
    ---------------------
     00000003-0000001B-1
    (1 row)

然后在一個新開始的事務的開頭把該快照標識符用在一個 SET TRANSACTION SNAPSHOT命令中:

    BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ;
    SET TRANSACTION SNAPSHOT '00000003-0000001B-1';