PostgreSQL/術語
為了促進對重要術語的一致使用和理解,我們在此列出並定義了它們。對於某些術語,我們包括簡短的註釋,以對主題進行初步介紹。

伺服器是指安裝了 PostgreSQL 的某些(實際或虛擬)硬體。在本檔案中,術語例項與伺服器的概念不同。請參閱本文件中例項的定義。
一組透過複製交換資訊的節點。
下載並安裝 PostgreSQL 後,您將在伺服器上獲得一組程式、指令碼、配置和其他檔案。這組檔案被稱為“安裝”。它包括所有例項程式,以及一些客戶端程式,如psql。
術語伺服器資料庫通常在客戶端/伺服器連線的上下文中用於指代例項或單個資料庫。
叢集是指檔案系統中的一個儲存區域(目錄、子目錄和檔案),其中包含一組資料庫以及元資料。資料庫叢集中還包括全域性物件(如使用者及其許可權)的定義。這些物件在整個資料庫叢集中都是已知的。(使用者對某些物件的訪問許可權(如特定表格或特定模式)可能會受到限制。在這種情況下,使用者將無權訪問叢集中的其他物件。)
資料庫叢集中至少包含三個資料庫:'template0'、'template1'、'postgres',可能還包含更多資料庫。
- 'template0':一個模板資料庫,可以被命令
CREATE DATABASE使用(template0 永遠不應被修改) - 'template1':一個模板資料庫,可以被命令
CREATE DATABASE使用(template1 可以被 DBA 修改) - 'postgres':一個空資料庫,主要用於維護目的
大多數 PostgreSQL 安裝只使用一個數據庫叢集。它的名稱是“main”。但是您可以在同一個 PostgreSQL 安裝上建立更多叢集,請參閱後面的工具initdb。
例項是指一組程序(在 UNIX 伺服器上)或一個服務(在 Windows 伺服器上)加上共享記憶體,它們控制和管理一個叢集。使用 IP 術語,可以說一個例項佔用一個 IP/埠組合,例如組合https://:5432。同一個伺服器的不同埠可能執行著另一個例項。構成例項的程序(在 UNIX 伺服器上)被稱為:postmaster(為每個客戶端連線建立一個“postgres”程序)、logger、checkpointer、background writer、WAL writer、autovacuum launcher、archiver、stats collector。每個程序的作用在架構一章中解釋。
如果您在伺服器上有多個叢集,您可以在同一臺機器上執行多個例項,每個叢集一個例項。
提示:其他出版物有時使用術語伺服器來指代例項。由於術語伺服器被廣泛用於指代實際或虛擬硬體,我們不使用伺服器作為例項的同義詞。
資料庫是指檔案系統中的一個儲存區域,其中包含一組物件,儲存在檔案中。物件包括資料、元資料(表格定義、資料型別、約束、檢視,……)以及其他資料,如索引。這些物件儲存在預設資料庫“postgres”或新建立的資料庫中。
一個數據庫的儲存區域被組織為資料庫叢集儲存區域內的子目錄樹。因此,資料庫叢集可以包含多個數據庫。
在一個新建立的資料庫叢集中(請參閱下面的:initdb),存在一個名為“postgres”的空資料庫。在大多數情況下,此資料庫保持為空,應用程式資料儲存在單獨的資料庫中,如“finance”或“engineering”。但是,“postgres”不應被刪除,因為某些工具會嘗試在此資料庫中儲存臨時資料。
模式是資料庫中的一個名稱空間:它包含命名物件(表格、資料型別、函式和運算子),這些物件的名字可能與該資料庫其他模式中存在於其他物件的名字重複。每個資料庫都包含預設模式“public”,並且可能包含更多模式。一個模式中的所有物件都必須位於同一個資料庫中。同一個資料庫中不同模式的物件可以有相同的名稱。
每個資料庫中還有另一個特殊模式。模式“pg_catalog”包含所有系統表格、內建資料型別、函式和運算子。另請參閱下面的“搜尋路徑”。
搜尋路徑是一個模式名稱列表。如果應用程式使用非限定物件名稱(例如:表名稱的“employee_table”),則搜尋路徑用於在給定的模式序列中定位此物件。 模式“pg_catalog”始終是搜尋路徑的第一部分,儘管它沒有在搜尋路徑中顯式列出。 此行為確保 PostgreSQL 找到系統物件。
儘管它的名稱是“initdb”,但該實用程式建立了一個新的叢集,其中包含 3 個資料庫“template0”、“template1”和“postgres”。
實用程式“createdb”在實際的叢集中建立了一個新的資料庫。
SQL 命令“CREATE DATABASE”在實際的叢集中建立了一個新的資料庫。
一個叢集及其資料庫由檔案組成,這些檔案包含資料、實際狀態資訊、修改資訊等等。 這些檔案按固定方式在一個目錄節點下組織。

共享緩衝區是 RAM 頁面,它們映象磁碟上資料檔案的頁面。 它們的存在是為了效能原因。 術語“共享”源於許多程序讀寫該區域的事實。
共享緩衝區中的頁面映象磁碟上資料檔案的頁面。 當客戶端請求更改資料時,這些頁面會更改,而不會 - 暫時 - 更改磁碟上的相關頁面。 在後臺寫入器將這些修改後的頁面寫入磁碟之前,它們被稱為“髒”頁面。
檢查點是時間的特殊點,在該時間點保證資料庫檔案處於一致狀態。 在檢查點時,所有更改記錄都重新整理到 WAL 檔案,所有髒資料頁面(在共享緩衝區中)都重新整理到磁碟,最後將特殊的檢查點記錄寫入 WAL 檔案。
例項的檢查點程序會自動定期觸發檢查點。 此外,可以透過在客戶端程式中發出命令“CHECKPOINT”來強制它們。 對於資料庫系統來說,執行檢查點需要很長時間 - 因為需要進行物理磁碟寫入。
WAL 檔案包含透過修改命令(如“INSERT”、“UPDATE”、“DELETE”或“CREATE TABLE ...”)應用於資料的更改。 這是冗餘資訊,因為它也記錄在資料檔案中(以便稍後獲得更好的效能)。 根據例項的配置,WAL 檔案中可能包含更多資訊。 WAL 檔案駐留在“pg_wal”目錄中(在 10 版之前名為“pg_xlog”),具有二進位制格式和固定大小 16MB。 當它們不再需要時,它們會透過重新命名和重用其已分配的空間來回收。
WAL 檔案中的單個資訊單元稱為日誌記錄。
提示:在 PostgreSQL 文件和相關文件中,還有許多其他類似的術語,這些術語指的是我們在本華夏公益教科書中稱為WAL 檔案的內容:段、WAL 段、日誌檔案(不要與術語“日誌檔案”混淆,見下文)、WAL 日誌檔案......
例項記錄並報告有關可讀文字檔案中的特殊情況的警告和錯誤訊息。 這些日誌檔案可以駐留在伺服器目錄結構中的任何地方,並且不是叢集的一部分。
提示:術語“日誌檔案”與本章的其他術語無關。 這裡提到它是因為它有時用作我們稱之為WAL 檔案的同義詞 - 見上文。
日誌記錄是WAL 檔案中的單個資訊單元。
術語“段”有時用作WAL 檔案的同義詞。
多版本併發控制(MVCC)是一種常見的資料庫技術,用於實現兩個目標:首先,它允許在邏輯級別管理並行執行的事務;其次,它確保併發讀寫操作的高效能。 它的實現方式如下:每當現有行的某些值發生變化時,PostgreSQL 就會將此行的最新版本寫入資料庫,而不會刪除舊版本。 在這種情況下,資料庫包含該行的多個版本。 除了其常規資料外,行還包含事務 ID,這些事務 ID 允許確定哪些其他事務將看到新行或舊行。 因此,其他事務只看到那些(其他事務)已提交的值。
過時的舊行會在稍後由實用程式“vacuumdb”或 SQL 命令“vacuum”刪除。
術語“冷”作為備份方法名稱的補充,表明使用此方法必須停止例項才能建立有用的備份。 相反,新增“熱”表示必須執行例項的方法(因此在備份操作期間可能會對資料進行更改)。
(冷)備份(檔案系統工具)
[編輯 | 編輯原始碼]冷備份是叢集中所有檔案的完整副本,使用 OS 工具(如 cp 或 tar)建立。 在建立冷備份期間,例項不能執行 - 否則備份將毫無用處。 因此,您需要一段應用程式不使用叢集中的任何資料庫的時間 - 無法實現連續的 7×24 操作模式。 其次:冷備份僅適用於叢集級別,不適用於任何更細粒度的級別,如資料庫或表。
提示:冷備份有時被稱為“離線備份”。
邏輯備份是資料庫或其某些部分內資料的完整副本。 它使用實用程式“pg_dump”建立。 儘管“pg_dump”可以與應用程式並行執行(例項必須啟動),但它會在其啟動時建立一致的快照。
pg_dump 支援兩種輸出格式。第一種是包含 SQL 命令(如 CREATE 和 INSERT)的文字格式。以這種格式建立的檔案可由 psql 用於恢復備份資料。第二種格式是二進位制格式,稱為“歸檔格式”。此格式的檔案可使用工具 pg_restore 恢復其資料。
如上所述,pg_dump 在資料庫級別或資料庫的較小部分(如表)上執行。如果要引用叢集級別,必須使用 pg_dumpall。請注意,使用者/角色及其許可權等重要物件始終在叢集級別定義。
此類備份包含兩個部分。第一個是所謂的基本備份,它是叢集所有檔案的副本。第二個包含備份命令開始後所有資料更改。它們儲存在 WAL 檔案中。
此類備份僅在叢集級別起作用,不在任何更細的粒度(如資料庫或表)上起作用。
PITR:特定時間點恢復
[編輯 | 編輯原始碼]當您使用“連續歸檔”(基本備份)技術並歸檔所有發生的 WAL 檔案時,您可以將資料庫恢復到任意時間點。為此,您必須恢復基本備份並針對其重放 WAL 檔案,直至定義的時間戳。
歸檔是將WAL 檔案複製到安全位置的過程。當您計劃使用PITR時,您必須確保WAL 檔案的序列儲存更長時間。為了支援在正確時間複製WAL 檔案的過程(當它們完全填滿並且已切換到下一個WAL 檔案時),PostgreSQL 執行歸檔過程,該過程是例項的一部分。此過程將WAL 檔案複製到可配置的目標位置。
恢復是將WAL 檔案針對物理備份進行重放的過程。涉及的步驟之一是從安全歸檔位置將WAL 檔案複製到其在“/pg_xlog”中的原始位置。恢復的目的是將叢集帶到定義時間戳的一致狀態。
當發生恢復時,例項處於歸檔恢復模式。
重啟點與檢查點類似。重啟點僅在例項處於歸檔恢復模式或備用模式時執行。
恢復成功後,PostgreSQL 將叢集轉移到新的時間線,以避免在重置 PITR 並重新應用WAL 檔案時(例如:到不同的時間戳)可能出現的問題。時間線名稱是順序編號:1、2、3、...。
複製是一種將資料從主伺服器寫入的傳送到一個或多個備用伺服器,甚至另一個主伺服器的技術。
主伺服器是伺服器上的一個例項,它除了本地處理資料外,還會將資料傳送到其他例項。
備用伺服器是伺服器上的一個例項,它接收來自主伺服器有關其資料更改的資訊。
熱備用伺服器是一個正在執行的例項,它處於備用模式(recovery.conf 檔案)。它會持續讀取和處理傳入的WAL 檔案(在日誌傳送的情況下)或日誌記錄(在流複製的情況下)。它不接受客戶端連線。
熱備用伺服器是一個熱備用伺服器,在 postgres.conf 中添加了hot_standby 標誌。它接受客戶端連線和只讀查詢。
當備用伺服器立即處理接收到的資料,向主伺服器傳送確認記錄,並且主伺服器延遲其 COMMIT 操作,直到收到備用伺服器的確認時,複製稱為同步。
當主伺服器將資料傳送到備用伺服器並且不期望此操作的任何反饋時,複製稱為非同步。
當日誌條目透過 TCP 連線從主伺服器傳輸到備用伺服器時,除了將其傳輸到本地WAL 檔案之外,還會使用此術語。流複製預設情況下是非同步的,但也可以是同步的。
日誌傳送是從主伺服器到備用伺服器傳輸WAL 檔案的過程。日誌傳送是非同步操作。