小巧、快速、可靠。
任選三項。
SQLITE_DBPAGE 虛擬表格

1. 概觀

SQLITE_DBPAGE 擴充套件實作了一個 同名虛擬表格,透過與分頁器互動,提供對底層資料庫檔案的直接存取。SQLITE_DBPAGE 能夠讀取和寫入資料庫的任何頁面。由於互動是透過分頁器層,所有變更都是交易性的。

警告:寫入 SQLITE_DBPAGE 虛擬表格很容易造成無法回復的資料庫損毀。不要允許不受信任的元件存取 SQLITE_DBPAGE 表格。使用 SQLITE_DBPAGE 表格時請小心。在對 SQLITE_DBPAGE 表格進行實驗之前,請備份重要資料。當 SQLITE_DBCONFIG_DEFENSIVE 旗標設定時,寫入 SQLITE_DBPAGE 虛擬表格會被停用。

SQLITE_DBPAGE 擴充套件包含在 合併 中,但預設為停用。使用 SQLITE_ENABLE_DBPAGE_VTAB 編譯時間選項來啟用 SQLITE_DBPAGE 擴充套件。SQLITE_DBPAGE 擴充套件使用未發布的內部介面,且無法在執行階段載入。將 SQLITE_DBPAGE 加入應用程式的唯一方法是使用 SQLITE_ENABLE_DBPAGE_VTAB 編譯時間選項進行編譯。

SQLITE_DBPAGE 擴充套件在 命令列殼層 的預設建置中啟用。

2. 用法

SQLITE_DBPAGE 虛擬表格讀寫表格,提供逐頁直接存取基礎磁碟檔案。虛擬表格的架構如下

CREATE TABLE sqlite_dbpage(
  pgno INTEGER PRIMARY KEY,
  data BLOB
);

SQLite 資料庫檔案分為多個頁面。第一個頁面為 1,第二個頁面為 2,以此類推。沒有頁面 0。每個頁面大小相同。每個頁面大小為 512 到 65536 之間的 2 的次方。請參閱 檔案格式 文件以取得更多詳細資料。

SQLITE_DBPAGE 表格允許應用程式檢視或取代資料庫檔案中每個頁面的原始二進位內容。不會嘗試詮釋頁面的內容。內容會以出現在磁碟上的方式逐位元組傳回。

SQLITE_DBPAGE 表格在資料庫檔案中每個頁面都有一列。SQLITE_DBPAGE 允許讀取或覆寫頁面。不過,無法變更資料庫檔案的大小。無法透過對該表格執行 DELETE 或 INSERT 作業來變更 SQLITE_DBPAGE 表格中的列數。

2.1. 在 ATTACH-ed 資料庫上使用 SQLITE_DBPAGE

上面顯示的 SQLITE_DBPAGE 表格架構並不完整。有一個第三個 隱藏欄位 名稱為「schema」,用來決定要讀取或寫入哪個 ATTACH-ed 資料庫。由於「schema」欄位是隱藏的,因此可以在 SQLITE_DBPAGE 作為 表格值函數 呼叫時用作參數。

例如,假設使用類似以下陳述式將其他資料庫附加到資料庫連線

ATTACH 'auxdata1.db' AS aux1;

然後,只要執行以下動作,就能讀取該資料庫檔案的第一個頁面

SELECT data FROM sqlite_dbpage('aux1') WHERE pgno=1;

如果省略「schema」,它會預設為主要資料庫(通常稱為「main」,除非使用 SQLITE_DBCONFIG_MAINDBNAME 重新命名)。因此,以下兩個查詢通常是等效的

SELECT data FROM sqlite_dbpage('main') WHERE pgno=1;
SELECT data FROM sqlite_dbpage WHERE pgno=1;

SQLITE_DBPAGE 表格可以像其他任何表格一樣參與聯結。因此,若要查看所有連線資料庫檔案的第一個頁面的內容,可以執行類似以下的陳述式

SELECT dbpage.data, dblist.name
  FROM pragma_database_list AS dblist
  JOIN sqlite_dbpage(dblist.name) AS dbpage
 WHERE dbpage.pgno=1;

此頁面最後修改於 2022-01-08 05:02:57 UTC