了解 PostgreSQL 架構
PostgreSQL 是用戶端/伺服器關聯式資料庫管理系統 (RDMS)。 PostgreSQL 也支援各種延伸模組,例如 Azure Cosmos DB for PostgreSQL 選項中的 Citus 延伸模組。 將延伸模組載入至資料庫之後,就會像任何內建功能一樣運作。
PostgreSQL 也有自己的查詢語言,稱為 pgsql。 此外,PostgreSQL 還支援程序性語言,例如 Ruby on Rails。

主從架構
PostgreSQL 是以主從架構為基礎。 伺服器會儲存資料、進行管理並將資料傳回用戶端程式。 用戶端程式會使用 pgSQL 或 PostgreSQL 支援的其中一種程序性語言 (例如 PL/pgSQL) 來要求資料。
PostgreSQL 工作階段包含三個組件:
- 郵政局長
- 用戶端應用程式
- 伺服器
郵政長
Postmaster 是管理 PostgreSQL 伺服器的監督精靈處理序。 Postmaster 精靈會管理各種伺服器處理程序之間的通訊,包括初始化伺服器、關閉伺服器、處理連線要求,以及執行其他背景處理程序。 在適用於 PostgreSQL 的 Azure 資料庫中,您無法存取檔案系統或 Postmaster 處理序。
用戶端應用程式
用戶端會執行查詢,並與適用於 PostgreSQL 的 Azure 資料庫伺服器上的資料庫互動。 若要執行查詢,您需要用戶端工具,例如 Azure Data Studio、DBeaver、pgAdmin 或 psql。 您將在下一個課程模組中了解用戶端工具。
伺服器流程
叢集 - 單一 PostgreSQL 伺服器可以裝載多個使用者資料庫。 PostgreSQL 會將這個資料庫集合稱為「叢集」。 每個資料庫會彼此分隔,而使用者和應用程式會與單一資料庫互動。 使用者會在叢集或伺服器層級建立。
這些資料庫的資料會儲存在叢集的資料目錄 (稱為 PGDATA) 中。 PGDATA 資料目錄中有一個包含正在執行之 PostgreSQL 版本的檔案、包含資料表空間連結的 pg_tblspc,以及包含預寫記錄檔的 pg_xlog。
備註
適用於 PostgreSQL 的 Azure 資料庫是一項管理儲存體和基礎檔案系統的服務。 身為此伺服器的使用者,您無法直接存取 PGDATA 目錄或其任何子目錄。
除了您建立的資料庫之外,還有三個系統資料庫:
- postgres - 預設資料庫。 建立伺服器之後,您可連線到 postgres 資料庫。
- azure_maintenance - 管理服務處理序的資料庫。 您無法直接存取此資料庫。
- azure_sys - 查詢存放區資料庫。 您不能修改 azure_sys 資料庫或其結構描述。 變更 azure_sys 中的任何內容,將會使得查詢資料存放區及其他效能功能無法正確運作。
結構描述 - 結構描述是資料庫物件的具名群組。 將物件組織成結構描述對於具有許多物件的大型資料庫會很有幫助。 例如,建立銷售相關物件的結構描述和用戶端相關物件的結構描述,可讓您更輕鬆地找到正確的物件。
伺服器參數 - PostgreSQL 有幾個設定檔,可決定資料庫引擎的運作方式。 主要 PostgreSQL 設定檔稱為 postgresql.conf。
適用於 PostgreSQL 的 Azure 資料庫已將這些設定檔取代為 [伺服器參數],其可透過 Azure 入口網站或使用 Azure CLI 存取。
若要在 Azure 入口網站中檢視或修改伺服器參數:
- 瀏覽至適用於 PostgreSQL 的 Azure 資料庫伺服器。
- 從左側功能表的 [設定] 下,選取 [伺服器參數]。
- 使用搜尋列來篩選參數清單,或選取您所需的頁碼。
儲存體- 適用於 PostgreSQL 的 Azure 資料庫會為您管理資料儲存體,並在伺服器層級進行佈建。 無論您選取的是 Burstable、General Purpose 或 Memory Optimized 計算層,您最多可以使用 32 TB 的儲存體。 若要佈建更多儲存體,請瀏覽至適用於 PostgreSQL 的 Azure 資料庫伺服器,然後從 [概觀] 區段選取您的 [設定]。 [計算 + 儲存體] 區段隨即顯示。 在 [儲存體] 下,針對 [儲存體大小 (GB)] 使用滑桿來選取您想要佈建的儲存體數量。
您佈建的儲存體數量會定義適用於 PostgreSQL 之 Azure 資料庫伺服器可用的 I/O 容量。 您可以在 Azure 入口網站或使用 Azure CLI 命令來監視 I/O 耗用量。 要監視的相關計量包括儲存體限制、儲存體百分比、已使用的儲存體和 IO 百分比。
備註
您可以在建立適用於 PostgreSQL 的 Azure 資料庫伺服器之後增加儲存體數量,但無法減少儲存體數量。
資料表空間 - 透過 PostgreSQL 的內部部署實作,您可以使用 pg_tblspc 子目錄建立資料表空間,以連結至名為 PGDATA 的主要存放區域。 適用於 PostgreSQL 的 Azure 資料庫不支援資料表空間:所有資料表都會在主要存放區域中建立。
系統目錄 - PostgreSQL 包含許多儲存資料庫物件相關資訊的系統資料表和檢視表。 例如,pg_database 會傳回伺服器上的所有資料庫,而 pg_class 則會儲存資料表的統計資料。
備註
適用於 PostgreSQL 的 Azure 資料庫允許存取部分,而非所有系統目錄。
延伸模組 - PostgreSQL 支援各種延伸資料庫引擎核心功能的延伸模組。 這些延伸模組可在名為 PostgreSQL Extensions Network (或 PGXN) 的存放庫中取得。
若要使用 PostgreSQL 延伸模組,其必須安裝在您的資料庫中。 若要安裝延伸模組,請從 psql 工具執行 CREATE EXTENSION 命令,以將延伸模組載入至您的資料庫。 例如:
SELECT create_extension('postgis');
若要了解適用於 PostgreSQL 的 Azure 資料庫支援哪些延伸模組,請執行下列查詢:
SELECT * FROM pg_available_extensions;
所有適用於 PostgreSQL 的 Azure 資料庫伺服器都包含 pg_stat_statements 延伸模組。 已安裝此延伸模組,以提供追蹤 SQL 陳述式執行統計資料的功能。 伺服器參數 pg_stat_statements.track 會定義延伸模組計入哪些陳述式。 選項是:
- Top - 追蹤用戶端直接發出的所有陳述式 (預設)。
- None - 不會追蹤任何語句。
- All - 追蹤所有陳述式,包括巢狀陳述式,以及函式所叫用的陳述式。
備註
記錄每個 SQL 陳述式會對伺服器的效能造成額外負荷。 如果您未主動使用 pg_stat_statements,請將此參數設定為 none。 另請注意,某些協力廠商監視服務可能依賴 pg_stat_statements。
查詢最佳化工具 - PostgreSQL 使用以成本為基礎的查詢最佳化方法。 剖析器會檢查查詢語法,並將查詢分成不同的部分。 剖析器會建立剖析樹狀結構,並將查詢傳遞至重寫器,以將規則套用至查詢。 規劃工具會在執行查詢之前,找出執行查詢的最佳方式。
背景處理序 - 每個交易模型的 PostgreSQL 處理序。 當新使用者連線時,PostgreSQL 會驗證使用者,並建立後端伺服器處理序來處理連線。 用戶端只會在提交查詢和接收查詢結果時,與伺服器處理序互動。