<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # SET TRANSACTION ## Name SET TRANSACTION?--?設置當前事務的特性 ## Synopsis ``` 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`命令為當前事務設置特性。它對后面的事務沒有影響。 `SET SESSION CHARACTERISTICS`為一個會話中隨后的每個事務設置缺省的事務特性。 在單獨的事務中,可以用`SET TRANSACTION`覆蓋這些默認事務特性。 可用的事務特性是事務隔離級別、事務訪問模式(讀/寫或者只讀)和可推遲的模式。 另外,可以選擇一個快照,只為當前事務而不是作為會話缺省。 事務的隔離級別決定一個事務在有其它事務并發運行時它能夠看到什么數據 `READ COMMITTED` 一條語句只能看到在它開始之前的數據。這是缺省。 `REPEATABLE READ` 當前事務中的所有語句只能看到在這次事務第一條查詢或者修改數據的語句執行之前已經提交的數據。 `SERIALIZABLE` 當前事務中的所有語句只能看到在這次事務第一條查詢或者修改數據的語句執行之前已經提交的數據。 如果當前并發的可串行化事務的讀或寫模式中任意一個事務(一次一個)執行創建不可能發生的情況, 那么其中的一個事務將會帶有`serialization_failure`錯誤退出。 SQL 標準還定義了另外一個級別,`READ UNCOMMITTED`。 在PostgreSQL里`READ UNCOMMITTED` 被當作`READ COMMITTED`。 事務隔離級別在事務中第一個查詢或數據修改語句(`SELECT`, `INSERT`, `DELETE`, `UPDATE`, `FETCH`, 或 `COPY`)執行之后就不能再次設置。 參閱[Chapter 13](#calibre_link-444) 獲取有關事務隔離級別和并發性控制的更多信息。 事務訪問模式決定事務是讀/寫還是只讀。讀/寫是缺省。如果一個事務是只讀, 而且寫入的表不是臨時表,那么下面的 SQL 命令是不允許的:`INSERT`, `UPDATE`, `DELETE`, `COPY FROM`; 而所有的`CREATE`, `ALTER`, `DROP` ; `COMMENT`, `GRANT`, `REVOKE`, `TRUNCATE`; `EXPLAIN ANALYZE`, `EXECUTE`都不允許。這是一個高層次的只讀概念, 它并不阻止所有對磁盤的寫入。 `DEFERRABLE`事務屬性沒什么影響,除非事務也是`SERIALIZABLE` 和`READ ONLY`。當為一個事務選擇所有這三個屬性時, 事務可能會在第一次請求它的快照時堵塞,之后運行時可以不需要正常的`SERIALIZABLE` 事務的開銷并且不會有任何導致序列化失敗或被取消的風險。 這個模式很適合于長時間運行的報告或備份。 `SET TRANSACTION SNAPSHOT`命令允許一個新的事務運行的_快照_ 與一個現存事務的相同。該已有的事務必須已經用`pg_export_snapshot`函數 (參閱[Section 9.26.5](#calibre_link-510))輸出了它的快照。 這個函數返回一個快照標識符,這個標識符必須給`SET TRANSACTION SNAPSHOT` 以指出要輸出哪個快照。該標識符在這個命令中必須寫作字符串,例如`'000003A1-1'`。 `SET TRANSACTION SNAPSHOT`只能在該事務第一次查詢或數據修改語句執行之前設置, (`SELECT`, `INSERT`, `DELETE`, `UPDATE`, `FETCH`, `COPY`)。另外,事務必須已經設置為`SERIALIZABLE` 或`REPEATABLE READ`隔離級別(否則,快照會被立即丟棄,因為 `READ COMMITTED`模式為每個命令接受一個新的快照)。如果導入事務使用 `SERIALIZABLE`隔離級別,那么輸出快照的事務必須也使用該隔離級別。 還有,非只讀的序列化事務不能從一個只讀的事務中導入一個快照。 ## 注意 如果執行`SET TRANSACTION`之前沒有執行`START TRANSACTION` 或`BEGIN`,那么它會顯得沒有效果一樣,因為事務將立即結束。 可以用在`BEGIN`或`START TRANSACTION` 里面聲明所需要的`_transaction_modes_` 的方法來避免使用`SET TRANSACTION`。但是這個選項不適用于 `SET TRANSACTION SNAPSHOT`。 會話的缺省事務模式也可以通過設置配置參數 [default_transaction_isolation](#calibre_link-511), [default_transaction_read_only](#calibre_link-512), 和 [default_transaction_deferrable](#calibre_link-513)的方法來設置。 (實際上`SET SESSION CHARACTERISTICS`只是一個用`SET` 來設置這些參數的另一種等效的方法)。這就意味著缺省值可以通過`ALTER DATABASE` 或在配置文件里等方法設置。參考[Chapter 18](#calibre_link-500)獲取更多信息。 ## 例子 開啟一個與已經存在的事務具有相同快照的新事務,首先從現存事務中輸出快照。 這將返回快照的標識符,例如: ``` BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ; SELECT pg_export_snapshot(); pg_export_snapshot -------------------- 000003A1-1 (1 row) ``` 然后在新打開的事務的開始的`SET TRANSACTION SNAPSHOT`命令中給出快照標識符: ``` BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ; SET TRANSACTION SNAPSHOT '000003A1-1'; ``` ## 兼容性 這些命令在SQL標準中定義了,除了`DEFERRABLE` 事務模式和`SET TRANSACTION SNAPSHOT`格式是PostgreSQL 的擴展。 標準里的缺省事務隔離級別是`SERIALIZABLE`; 但在PostgreSQL里,缺省隔離級別是 `READ COMMITTED`, 但是你可以用上面描述的方法修改它。 在 SQL 標準里還有另外一種事務特性可以用這些命令設置:診斷范圍的大小。 這個概念只用于嵌入式 SQL ,因此沒有在PostgreSQL服務器里實現。 SQL 標準要求在相連的`_transaction_modes_` 之間使用逗號,但是因為歷史原因,PostgreSQL允許省略這個逗號。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看