PostgreSQL的資料儲存 八 資料儲存

2021-08-26 04:37:25 字數 2021 閱讀 2496

在作業系統層面,資料儲存,只是一些二進位制資訊,這個層次,是不知道檔案內容的含義的。檔案的邏輯含義,取決於應用層面。

資料庫系統的檔案組織,也如此。在外存儲存,以二進位制格式存放,讀寫檔案,以塊(8k)為單位,讀入的資料,存放與資料緩衝區,所以,資料的邏輯含義,始於資料緩衝區。

在bufpage.h檔案中,有如下定義:

typedef struct pageheaderdata

/* *** lsn is member of *any* block, not only page-organized ones */

xlogrecptr pd_lsn; /* lsn: next byte after last byte of xlog

* record for last change to this page */

uint16 pd_tli; /* least significant bits of the timelineid

* containing the lsn */

uint16 pd_flags; /* flag bits, see below */

locationindex pd_lower; /* offset to start of free space */

locationindex pd_upper; /* offset to end of free space */

locationindex pd_special; /* offset to start of special space */

uint16 pd_pagesize_version;

transactionid pd_prune_xid; /* oldest prunable xid, or zero if none */

itemiddata pd_linp[1]; /* beginning of line pointer array */

} pageheaderdata;

這個結構,描述了資料頁的頁頭資訊。乙個資料頁,是乙個塊大小,即8k。這個頁的初始部分,完全由pageheaderdata這個結構定義。

結構成員名稱

型別

功能

pd_lsn

xlogrecptr

寫到redo日誌中的記錄的結束位置的位置標識,用以把資料頁和redo日誌關聯,用於恢復資料時校驗日誌檔案和資料檔案的一致性

pd_tli

uint16

與redo日誌相關,上乙個記錄了redo日誌的檔案id和偏移,本標誌記載了redo日誌的「timeline」時間線。在redo日誌中,完整標識乙個日誌檔案,是靠時間線和日誌id;完整標識乙個日誌位置,是靠時間線和日誌id和日誌檔案中的偏移值

pd_flags

uint16

標識本頁面的資料儲存情況,是半滿頁、滿頁、、還是有冗餘資料(資料對於一些使用者是否可見,與事務相關,與pg實現的mvcc相關)

pd_lower

locationindex

指向空閒空間的開始位置

pd_upper

locationindex

指向空閒空間的結束位置

pd_special

locationindex

指向頁面尾部的乙個特殊塊的位置處,通過pageinit函式可以了解不同呼叫函式通常有不同的特殊塊存在。如gin索引對應的頁面、hash頁面、btree索引頁面都有特殊的塊標識特別的資訊

pd_pagesize_version

uint16

標識資料頁的頁面版本,不同pg的版本,資料頁格式可能發生變化,用以標識變化的。這樣,就存在根據頁面版本號讀取不同資訊的可能

pd_prune_xid

transactionid

記載本頁面上最老的事務id值,在做vacuum操作時使用

pd_linp[1]

itemiddata

指向頁面上存在的tuple(記錄)的指標

src/include/storage/itemid.h

PostgreSQL的資料儲存(一) 概述

pg儲存層的實現,主要分為三部分 儲存層和資料庫系統的關係,參加下表 行數從上到下,是使用者訪問資料庫的過程和資料庫管理系統的各模組間的關係層次 層次 層次名稱 說明 使用者介面 使用者命令 psql jdbc odbc sql互動工具等 資料訪問層 資料訪問層 src backend access...

postgresql函式儲存過程實現資料批量插入

建立函式 create function insert page text,char,char,char,char,text,text,text,text,text,text,text,text,text,text,text,text,text,text,real,real,text,text,te...

PostgreSQL 儲存json,jsonb型別

postgresql 字串隱式轉換json指令碼 隱式將varchar轉換為json create or replace function json in varchar varchar returns json as select json in 1 cstring language sql im...