<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國際加速解決方案。 廣告
                # 58.6\. 數據庫分頁文件 本節提供一個在PostgreSQL表和索引使用的頁格式的概述。\[1\] 序列和TOAST表的格式就像一個普通表的。 下面說明一下,一個_字節_假定為包含8位。另外, 術語_項_為存儲在頁上的一個獨立數據值。 在表中,一項是一行;在索引中,一項為一個索引條目。 每個表和索引存儲為固定大小的_頁_數組。 (通常 8 kB,不過當編譯服務器的時候,可以選擇不同的頁大小) 在表中,所有的頁是邏輯等價的,所以一個特殊項(行) 可以存儲在任意頁。在索引,第一頁通常保留為持有控制信息的_元頁_, 這里可以有不同類型的索引頁,依賴于索引訪問方法。 [Table 58-2](#calibre_link-2147)顯示一個頁的整體布局,這里每頁有5部分。 **Table 58-2\. 頁整體布局** | 項 | 描述 | | --- | --- | | PageHeaderData | 24字節長整型。包含關于頁的一般信息,包含自由空間指針。 | | ItemIdData | 指向實際項的(偏移量,長度)數組對。每項4字節。 | | Free space | 未分配空間。從這個區域開始分配新項指針,或從結尾分配新項指針 | | Items | 實際項本身 | | Special space | 索引訪問方法專用數據。不同方法存儲不同的數據。普通表里為空。 | 每頁的前24個字節構成一個頁頭(PageHeaderData)。 在[Table 58-3](#calibre_link-2148)有它的詳細格式。 前兩個字段跟蹤相關頁的最近的WAL條目。 下邊的一個2字節的字段是包含標志位。 隨后由3個2字節整數字段(`pd_lower`, `pd_upper`, 和`pd_special`)。 這些包含分別為從頁開始到未分配空間的開始,到未分配空間的結束, 專用空間的開始的偏移字節數。下邊頁頭的2字節,pd_pagesize_version, 存儲頁大小和版本指示符。 從PostgreSQL 8.3開始版本編號是4; PostgreSQL 8.1和8.2使用版本編號3; PostgreSQL 8.0使用版本編號2; PostgreSQL 7.3和7.4使用版本編號1; 先前發布版本使用版本編號0。(在大多數這些版本中,基本的頁布局和頭格式沒有變化,但是堆布局有行頭.) 頁面大小是基本上只存在一個交叉檢查;在安裝的版本中, 這里不支持多于一頁大小的。最后一個字段是個提示,顯示是否整理頁, 可能是有利的。它跟蹤在頁上最舊的未修整的XMAX。 **Table 58-3\. PageHeaderData布局** | 字段 | 類型 | 長度 | 描述 | | --- | --- | --- | --- | | pd_lsn | XLogRecPtr | 8字節 | LSN: 該頁上xlog日志記錄變化的最后字節的下一字節 | | pd_tli | uint16 | 2字節 | 最后變化的時間線ID(僅其最低16位) | | pd_flags | uint16 | 2字節 | 標志位 | | pd_lower | LocationIndex | 2字節 | 到自由空間開始的偏移量 | | pd_upper | LocationIndex | 2字節 | 到自由空間結尾的偏移量 | | pd_special | LocationIndex | 2字節 | 到專用空間開始的偏移量 | | pd_pagesize_version | uint16 | 2字節 | 頁大小和版本編號布局信息 | | pd_prune_xid | TransactionId | 4字節 | 頁上最舊的未修整的XMAX,如果沒有則為零。 | 在`src/include/storage/bufpage.h`可以找到所有的詳細信息。 下面的頁頭是項標識符(`ItemIdData`),每個需要4字節。 一個項標識符包含一個到項開始的字節偏移, 以字節計的長度,和一些影響它解釋的屬性位。 新項標識符需要從未分配空間的開始分配。 可以通過查看`pd_lower`來確定項標識符的數量,分配新的標示符, 其會增加。因為一個項標示符從來不移動直到釋放了它,實際上, 每個指針為PostgreSQL所創建的一項由頁號和項標識符的索引構成。 (`ItemPointer`,還可以稱為`CTID`)。 項本身存儲在從未分配的空間的結尾向后分配的空間。確切的結構取決于包含什么表。 表和序列兩都使用一個名為`HeapTupleHeaderData`的結構,下面描述。 最后這段是"特殊段"其包含想存放的任何訪問方法。 例如,b-tree索引存儲連接頁左右的兄弟,以及相應的索引結構的一些其它數據。 普通的表根本沒有使用特殊段。 (通過設置`pd_special`等于頁大小來表示) 所有表行結構方式相同。有個固定大小的頭(在大多數機器占用23字節), 隨后一個NULL位圖的可選項,對象ID字段,和用戶數據。 該頭的詳細信息在[Table 58-4](#calibre_link-2149)。 實際的用戶數據(行中列)由`t_hoff`表示的偏移量開始, 它必須始終是為平臺的MAXALIGN間距的倍數。 NULL位圖僅存在,如果在`t_infomask`設置了_HEAP_HASNULL_位。 如果它存在,它就開始于固定頭的后面,占用足夠的字節,每數據列一位。 (那是,`t_natts`位一塊) 在這個位列表中,一個1位 標識非空,一個 0 位是空。 對象ID 僅存在,如果在`t_infomask`設置了_HEAP_HASOID_位。 如果存在,它將出現在t_hoff邊界前。任何需要做 t_hoff 的MAXALIGN倍數的填充, 出現在NULL位圖和對象ID之間。(反過來又保證對象ID得到恰當的對齊) **Table 58-4\. HeapTupleHeaderData布局** | 字段 | 類型 | 長度 | 描述 | | --- | --- | --- | --- | | t_xmin | TransactionId | 4字節 | 插入XID戳 | | t_xmax | TransactionId | 4字節 | 刪除XID戳 | | t_cid | CommandId | 4字節 | 插入和/或 刪除 CID戳(使用t_xvac覆蓋) | | t_xvac | TransactionId | 4字節 | VACUUM操作移動一行版本的XID | | t_ctid | ItemPointerData | 6字節 | 這個當前的或新行版本的TID | | t_infomask2 | uint16 | 2字節 | 字段個數,加上各種標志位 | | t_infomask | uint16 | 2字節 | 各種標志位數 | | t_hoff | uint8 | 1字節 | 用戶數據偏移量 | 在`src/include/access/htup.h`可以找到所有的詳細信息。 解釋實際數據只能從其它表獲取信息來做,大多`pg_attribute`。 需要來表示字段位置的鍵值是`attlen`和`attalign`。 沒有直接獲取特定字段的方法,除僅當有固定寬度字段并且沒有空值的情況外。 所有這些策略封裝在函數_heap_getattr_,_fastgetattr_ 和_heap_getsysattr_。 要讀取數據你需要逐次檢查每個屬性。首先檢查字段是否為NULL依據NULL位圖。 如果是,跳到下一個。然后確定你已經右對齊。如果字段是固定寬度的字段, 那么所有的字節簡單的放置。如果它是變長的字段(attlen = -1) 那么它是一個更復雜的位。所有變長數據類型共享通用的頭結構`struct varlena`, 其包括存儲值的總長度和一些標志位。 依賴這些標志,數據可能是行內或在一個TOAST表;它也可能是壓縮的。 (參閱[Section 58.2](#calibre_link-80)) ### Notes \[1\] 實際上,索引訪問方法不需要使用這個頁格式。所有已經存在的索引方法 需要使用基本格式,但是保持在索引元頁上的數據通常不遵循項布局規則。
                  <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>

                              哎呀哎呀视频在线观看