「適用於 PostgreSQL 的 Azure 資料庫」彈性伺服器中的 PostgreSQL 延伸模組
適用範圍:適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器
適用於 PostgreSQL 的 Azure 資料庫彈性伺服器可讓您使用延伸模組來擴充資料庫功能。 延伸模組會將多個相關 SQL 物件統合在同一個套件之中,而且只要一個命令,就能載入或從資料庫移除。 載入資料庫之後,延伸模組就可如內建功能般運作。
如何使用 PostgreSQL 擴充功能
在適用於 PostgreSQL 的 Azure 資料庫彈性伺服器中安裝延伸模組之前,您必須建立這些延伸模組的允許清單以供使用。
使用 Azure 入口網站:
- 選取適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器執行個體。
使用 Azure CLI:
您可以透過 CLI 參數集命令建立延伸模組的允許清單。
az postgres flexible-server parameter set --resource-group <resource_group> --server-name <server> --subscription <subscription_id> --name azure.extensions --value <extension_name>,<extension_name>
使用 ARM 範本:下列範例建立 postgres-test-server
伺服器上延伸模組 dblink
、dict_xsyn
、pg_buffercache
的允許清單:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"flexibleServers_name": {
"defaultValue": "postgres-test-server",
"type": "String"
},
"azure_extensions_set_value": {
"defaultValue": " dblink,dict_xsyn,pg_buffercache",
"type": "String"
}
},
"variables": {},
"resources": [
{
"type": "Microsoft.DBforPostgreSQL/flexibleServers/configurations",
"apiVersion": "2021-06-01",
"name": "[concat(parameters('flexibleServers_name'), '/azure.extensions')]",
"properties": {
"value": "[parameters('azure_extensions_set_value')]",
"source": "user-override"
}
}
]
}
shared_preload_libraries
是伺服器設定參數,可判斷適用於 PostgreSQL 的 Azure 資料庫彈性伺服器啟動時要載入的程式庫。 任何使用共用記憶體的程式庫都必須透過此參數載入。 如果您的延伸模組必須新增至共用預先載入程式庫,請遵循下列步驟:
使用 Azure 入口網站:
- 選取適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器執行個體。
- 從資源功能表的 [設定] 區段下,選取 [伺服器參數]。
- 搜尋
shared_preload_libraries
參數。 - 選取您要新增的程式庫。
:::image type="content" source="./media/concepts-extensions/shared-libraries.png" alt-text="Screenshot showing Azure Database for PostgreSQL -setting shared preload libraries parameter setting for extensions installation." lightbox="./media/concepts-extensions/shared-libraries.png":::
```Using [Azure CLI](/cli/azure/):
You can set `shared_preload_libraries` via CLI [parameter set](/cli/azure/postgres/flexible-server/parameter?view=azure-cli-latest&preserve-view=true) command.
```azurecli
az postgres flexible-server parameter set --resource-group <resource_group> --server-name <server> --subscription <subscription_id> --name shared_preload_libraries --value <extension_name>,<extension_name>
建立擴充功能
在建立延伸模組的允許清單並載入後,接著必須在您計劃使用這些延伸模組的每個資料庫進行安裝。
- 用戶必須是角色的成員
azure_pg_admin
,才能建立擴充功能。 角色的成員azure_pg_admin
可以將許可權授與其他使用者,以建立擴充功能。 - 若要安裝特定延伸模組,您應該執行 CREATE EXTENSION 命令。 此命令會將封裝的物件載入您的資料庫。
注意
適用於 PostgreSQL 的 Azure 資料庫彈性伺服器中提供的第三方延伸模組是開放原始碼授權代碼。 目前,我們不會提供任何具有進階或專屬授權模型的第三方延伸模組或延伸模組版本。
適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體支援下表列出的主要 PostgreSQL 延伸模組子集。 此資訊也可以藉由執行 SHOW azure.extensions;
來取得。 適用於 PostgreSQL 的 Azure 資料庫彈性伺服器不支援本文件中未列出的延伸模組。 您無法在適用於 PostgreSQL 的 Azure 資料庫彈性伺服器中建立或載入自己的延伸模組。
延伸模組版本
下列延伸模組可在適用於 PostgreSQL 的 Azure 資料庫彈性伺服器中使用:
注意
下表中具有 ✔️ 標記的延伸模組,需要在 shared_preload_libraries
伺服器參數中啟用其對應的程式庫。
延伸模組名稱 | 說明 | PostgreSQL 17 | PostgreSQL 16 | PostgreSQL 15 (英文) | PostgreSQL 14 | PostgreSQL 13 | PostgreSQL 12 | PostgreSQL 11 |
---|---|---|---|---|---|---|---|---|
address_standardizer | 用來將位址剖析為組成項目。 通常用來支援對位址進行地理編碼的正規化步驟。 | 3.5.0 | 3.3.3 | 3.3.1 | 3.2.3 | 3.2.3 | 3.2.3 | 3.2.3 |
address_standardizer_data_us | Address Standardizer US 資料集範例 | 3.5.0 | 3.3.3 | 3.3.1 | 3.2.3 | 3.2.3 | 3.2.3 | 3.2.3 |
年齡 (預覽) | 提供圖形資料庫功能 | N/A | 1.5.0 ✔️ | 1.5.0 ✔️ | 1.5.0 ✔️ | 1.5.0 ✔️ | N/A | N/A |
amcheck | 用來驗證關聯完整性的函式 | 1.4 | 1.3 | 1.3 | 1.3 | 1.2 | 1.2 | 1.1 |
anon (預覽) | 資料匿名化工具 | 1.3.2 ✔️ | 1.3.2 ✔️ | 1.3.2 ✔️ | 1.3.2 ✔️ | 1.3.2 ✔️ | 1.3.2 ✔️ | 1.3.2 ✔️ |
azure_ai | 適用於 PostgreSQL 的 Azure AI 和 ML 服務整合 | N/A | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | N/A |
azure_storage | 適用於 PostgreSQL 的 Azure 整合 | N/A | 1.5 ✔️ | 1.5 ✔️ | 1.5 ✔️ | 1.5 ✔️ | 1.5 ✔️ | N/A |
bloom | Bloom 存取方法 - 簽章檔案型索引 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 |
btree_gin | 支援在 GIN 中編制通用資料類型的索引 | 1.3 | 1.3 | 1.3 | 1.3 | 1.3 | 1.3 | 1.3 |
btree_gist | 支援在 GiST 中編制通用資料類型的索引 | 1.7 | 1.7 | 1.7 | 1.6 | 1.5 | 1.5 | 1.5 |
citext | 不區分大小寫字元字串的資料類型 | 1.6 | 1.6 | 1.6 | 1.6 | 1.6 | 1.6 | 1.5 |
cube | 多維度 Cube 的資料類型 | 1.5 | 1.5 | 1.5 | 1.5 | 1.4 | 1.4 | 1.4 |
dblink | 從資料庫內連線至其他 PostgreSQL 資料庫 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 |
dict_int | 整數的文字搜尋字典範本 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 |
dict_xsyn | 用於擴充同義字處理的文字搜尋字典範本 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 |
earthdistance | 計算地球表面上的大圓距離 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 |
fuzzystrmatch | 判斷字串之間的相似性與距離 | 1.2 | 1.2 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 |
hstore | 用來儲存索引鍵/值組集合的資料類型 | 1.8 | 1.8 | 1.8 | 1.8 | 1.7 | 1.6 | 1.5 |
hypopg | PostgreSQL 的假設索引 | 1.4.0 | 1.4.0 | 1.4.0 | 1.4.0 | 1.4.0 | 1.4.0 | 1.4.0 |
intagg | 整數匯總工具和列舉程式 (過時) | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 |
intarray | 1-D 整數陣列的函式、運算子和索引支援 | 1.5 | 1.5 | 1.5 | 1.5 | 1.3 | 1.2 | 1.2 |
isn | 國際產品編號標準的資料類型 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 |
lo | 大型物件維護 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 |
login_hook | Login_hook - 在登入時間執行 login_hook.login() 的勾點 | 1.5 | 1.5 | 1.4 | 1.4 | 1.4 | 1.4 | 1.4 |
ltree | 階層式樹狀結構的資料類型 | 1.3 | 1.2 | 1.2 | 1.2 | 1.2 | 1.1 | 1.1 |
oracle_fdw | Oracle 資料庫的外部數據包裝函式 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | N/A |
orafce | 模擬函式和套件子集 (來自 Oracle RDBMS) 的函式和運算子 | 4.9 | 4.4 | 3.24 | 3.18 | 3.18 | 3.18 | 3.7 |
pageinspect | 檢查低層級的資料庫頁面內容 | 1.12 | 1.12 | 1.11 | 1.9 | 1.8 | 1.7 | 1.7 |
pgaudit | 提供稽核功能 | 16.0 ✔️ | 16.0 ✔️ | 1.7 ✔️ | 1.6.2 ✔️ | 1.5 ✔️ | 1.4.3 ✔️ | 1.3.2 ✔️ |
pg_buffercache | 檢查共用緩衝集區 | 1.5 | 1.4 | 1.3 | 1.3 | 1.3 | 1.3 | 1.3 |
pg_cron | PostgreSQL 的工作排程器 | 1.6 ✔️ | 1.6 ✔️ | 1.6 ✔️ | 1.6 ✔️ | 1.6 ✔️ | 1.6 ✔️ | 1.4-1 ✔️ |
pgcrypto | 密碼編譯函式 | 1.3 | 1.3 | 1.3 | 1.3 | 1.3 | 1.3 | 1.3 |
pg_freespacemap | 檢查可用空間對應 (FSM) | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 |
pg_hint_plan | 可讓您在 SQL 註解中使用所謂的提示來調校 PostgreSQL 執行計畫。 | 1.7.0 ✔️ | 1.6.0 ✔️ | 1.5 ✔️ | 1.4 ✔️ | 1.3.7 ✔️ | 1.3.7 ✔️ | 1.3.7 ✔️ |
pglogical | PostgreSQL 邏輯複寫 | 2.4.5 ✔️ | 2.4.4 ✔️ | 2.4.2 ✔️ | 2.4.1 ✔️ | 2.4.1 ✔️ | 2.4.1 ✔️ | 2.4.1 ✔️ |
pg_partman | 依時間或識別碼管理資料分割資料表的延伸模組 | 5.0.1 ✔️ | 5.0.1 ✔️ | 4.7.1 ✔️ | 4.6.1 ✔️ | 4.5.0 ✔️ | 4.5.0 ✔️ | 4.5.0 ✔️ |
pg_prewarm | 預先載入關聯資料 | 1.2 ✔️ | 1.2 ✔️ | 1.2 ✔️ | 1.2 ✔️ | 1.2 ✔️ | 1.2 ✔️ | 1.2 ✔️ |
pg_repack | 以最少鎖定重新組織 PostgreSQL 資料庫中的資料表 | 1.4.7 | 1.4.7 | 1.4.7 | 1.4.7 | 1.4.7 | 1.4.7 | 1.4.7 |
pgrouting | PgRouting 延伸模組 | N/A | N/A | 3.5.0 | 3.3.0 | 3.3.0 | 3.3.0 | 3.3.0 |
pgrowlocks | 顯示資料列層級鎖定資訊 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 |
pg_squeeze | 從關聯中移除未使用空間的工具。 | 1.7 ✔️ | 1.6 ✔️ | 1.6 ✔️ | 1.5 ✔️ | 1.5 ✔️ | 1.5 ✔️ | 1.5 ✔️ |
pg_stat_statements | 追蹤執行的所有 SQL 語句的執行統計數據 | 1.11 ✔️ | 1.10 ✔️ | 1.10 ✔️ | 1.9 ✔️ | 1.8 ✔️ | 1.7 ✔️ | 1.6 ✔️ |
pgstattuple | 顯示元組層級統計資料 | 1.5 | 1.5 | 1.5 | 1.5 | 1.5 | 1.5 | 1.5 |
pg_trgm | 文字相似度測量和根據三字母組的索引搜尋 | 1.6 | 1.6 | 1.6 | 1.6 | 1.5 | 1.4 | 1.4 |
pg_visibility | 檢查可見性對應 (VM) 和頁面層級可見性資訊 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 |
plpgsql | PL/pgSQL 程序性語言 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 |
plv8 | PL/JavaScript (v8) 信任的程序性語言 | 3.1.7 | 3.1.7 | 3.1.7 | 3.0.0 | 3.0.0 | 3.0.0 | 3.0.0 |
postgis | PostGIS 幾何和地理空間類型和函式 | 3.5.0 | 3.3.3 | 3.3.1 | 3.2.3 | 3.2.3 | 3.2.3 | 3.2.3 |
postgis_raster | PostGIS 點陣類型和函式 | 3.5.0 | 3.3.3 | 3.3.1 | 3.2.3 | 3.2.3 | 3.2.3 | 3.2.3 |
postgis_sfcgal | PostGIS SFCGAL 函式 | 3.5.0 | 3.3.3 | 3.3.1 | 3.2.3 | 3.2.3 | 3.2.3 | 3.2.3 |
postgis_tiger_geocoder | PostGIS Tiger 地理編碼器和反向地理編碼器 | 3.5.0 | 3.3.3 | 3.3.1 | 3.2.3 | 3.2.3 | 3.2.3 | 3.2.3 |
postgis_topology | PostGIS 拓撲空間類型和函式 | 3.5.0 | 3.3.3 | 3.3.1 | 3.2.3 | 3.2.3 | 3.2.3 | 3.2.3 |
postgres_fdw | 遠端 PostgreSQL 伺服器的外部資料包裝函式 | 1.1 | 1.1 | 1.1 | 1.1 | 1.0 | 1.0 | 1.0 |
postgres_protobuf | PostgreSQL 的通訊協議緩衝 | 0.2 | 0.2 | 0.2 | 0.2 | 0.2 | 0.2 | N/A |
semver | 語意版本資料類型 | 0.32.1 | 0.32.1 | 0.32.0 | 0.32.0 | 0.32.0 | 0.32.0 | 0.32.0 |
session_variable | Session_variable - 工作階段變數和常數的註冊與操作 | 3.3 | 3.3 | 3.3 | 3.3 | 3.3 | 3.3 | 3.3 |
sslinfo | SSL 憑證的相關資訊 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 |
tablefunc | 操作整個資料表 (包括交叉資料表) 的函式 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 |
tds_fdw | 用於查詢 TDS 資料庫的外部資料包裝函式 (Sybase 或 Microsoft SQL Server) | 2.0.3 | 2.0.3 | 2.0.3 | 2.0.3 | 2.0.3 | 2.0.3 | 2.0.3 |
timescaledb | 針對時間序列資料啟用可調整的插入和複雜查詢 | N/A | 2.13.0 ✔️ | 2.10.0 ✔️ | 2.10.0 ✔️ | 2.10.0 ✔️ | 2.10.0 ✔️ | 1.7.4 ✔️ |
tsm_system_rows | TABLESAMPLE 方法,接受資料列數目做為限制 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 |
tsm_system_time | TABLESAMPLE 方法,接受以毫秒為單位的時間做為限制 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 |
unaccent | 移除重音的文字搜尋字典 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 |
uuid-ossp | 產生通用唯一識別碼 (UUID) | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 |
vector | 向量資料類型和 ivfflat 與 hnsw 存取方法 | 0.7.0 | 0.7.0 | 0.7.0 | 0.7.0 | 0.7.0 | 0.7.0 | 0.5.1 |
升級 PostgreSQL 延伸模組
透過簡單的命令,允許資料庫延伸模組就地升級。 這項功能可讓客戶將第三方延伸模組自動更新到最新版本,而不需要手動操作,就能維護並保護系統的最新狀態。
更新延伸模組
若要將已安裝的延伸模組更新為 Azure 所支援的最新可用版本,請使用下列 SQL 命令:
ALTER EXTENSION <extension_name> UPDATE;
此命令可讓使用者手動升級至 Azure 核准的最新版本,以增強相容性和安全性,藉此簡化資料庫延伸模組的管理。
限制
雖然更新延伸模組很簡單,但有一些限制:
- 特定版本選取:此命令不支援更新至延伸模組的中繼版本。 一律會更新至最新的可用版本。
- 降級:不支援將延伸模組降級到舊版本。 如果需要降級,可能需要支援協助,並需視舊版的可用性而定。
安裝的延伸模組
若要列出目前安裝在資料庫上的延伸模組,請使用下列 SQL 命令:
SELECT * FROM pg_extension;
可用的延伸模組和版本
若要檢查目前的資料庫安裝可以使用用的延伸模組版本,請查詢 pg_available_extensions
系統目錄檢視。 例如,若要判斷 azure_ai
延伸模組的可用版本,請執行:
SELECT * FROM pg_available_extensions WHERE name = 'azure_ai';
這些命令會對資料庫的延伸模組設定提供必要的深入解析,協助以有效率且安全的方式來維護系統。 藉由啟用輕鬆更新至最新的延伸模組,適用於 PostgreSQL 的 Azure 資料庫會繼續支援資料庫應用程式的強固、安全且有效率的管理。
適用於 PostgreSQL 的 Azure 資料庫彈性伺服器的特定考量
以下是支援延伸模組的清單,在適用於 PostgreSQL 的 Azure 資料庫彈性伺服器服務中使用時需要某些特定考量。 清單會依字母順序排序。
dblink
dblink 可讓您從一個適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體連線到另一個執行個體,或連線到相同伺服器中的另一個資料庫。 適用於 PostgreSQL 的 Azure 資料庫彈性伺服器支援任何 PostgreSQL 伺服器的傳入和傳出連線。 傳送伺服器需要允許對接收伺服器的輸出連線。 同樣地,接收伺服器需要允許來自傳送伺服器的連線。
如果您打算使用此延伸模組,我們建議您使用虛擬網路整合來部署伺服器。 依預設,虛擬網路整合允許虛擬網路中伺服器之間的連線。 您也可以選擇使用虛擬網路網路安全性群組來自訂存取。
pg_buffercache
pg_buffercache
可用來研究 shared_buffers 的內容。 使用此延伸模組,您可以判斷特定關聯是否已快取 (在 shared_buffers
中)。 此延伸模組可協助您針對效能問題進行疑難排解 (快取相關的效能問題)。
此延伸模組與 PostgreSQL 的核心安裝整合,因此安裝容易。
CREATE EXTENSION pg_buffercache;
pg_cron
pg_cron 是適用於 PostgreSQL 而以 cron 為基礎的簡易工作排程器,可在資料庫內以延伸模組的形式執行。 pg_cron
延伸模組可用來在 PostgreSQL 資料庫內執行排程的維護工作。 例如,您可以執行資料表的定期清理,或移除舊的資料工作。
pg_cron
可以平行執行多個工作,但一次最多執行一個工作的執行個體。 如果第二次執行應該在第一次執行完成之前開始,則第二次執行會排入佇列,並在第一次執行完成時立即開始。 如此,這可確保工作的執行次數與排程一樣多,且不會自行同時執行。
一些範例:
若要在星期六上午 3:30 (GMT) 刪除舊資料。
SELECT cron.schedule('30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$);
若要每天上午 10:00 (GMT) 在預設資料庫 postgres
中執行資料清理。
SELECT cron.schedule('0 10 * * *', 'VACUUM');
若要從 pg_cron
取消排程所有工作。
SELECT cron.unschedule(jobid) FROM cron.job;
若要查看目前使用 pg_cron
排程的所有工作。
SELECT * FROM cron.job;
若要每天上午 10:00 (GMT),透過 azure_pg_admin 角色帳戶在資料庫 'testcron' 中執行資料清理。
SELECT cron.schedule_in_database('VACUUM','0 10 * * * ','VACUUM','testcron',null,TRUE);
注意
pg_cron 延伸模組會預先載入至 postgres 資料庫內每個適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體的 shared_preload_libraries
,讓您能夠排程工作以在適用於 PostgreSQL 的 Azure 資料庫彈性伺服器 DB 執行個體內的其他資料庫中執行,而不會危害安全性。 不過,基於安全性考量,您仍然需要建立 pg_cron
延伸模組的允許清單,並使用 CREATE EXTENSION 命令進行安裝。
從 pg_cron
1.4 版開始,您可以使用 cron.schedule_in_database
和 cron.alter_job
函式來排程特定資料庫中的作業,並分別更新現有的排程。
一些範例:
在星期六上午 3:30 (GMT) 刪除資料庫 DBName 上的舊資料。
SELECT cron.schedule_in_database('JobName', '30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$,'DBName');
注意
cron_schedule_in_database
函式允許使用者名稱作為選用參數。 將使用者名稱設定為非 Null 值,需要 PostgreSQL 超級使用者權限,而且適用於 PostgreSQL 的 Azure 資料庫彈性伺服器不支援。 上述範例顯示執行此函式並將選用的使用者名稱參數省略或設定為 null,這會在使用者排程作業的內容中執行作業,其應該具有 azure_pg_admin 角色權限。
更新或變更現有排程的資料庫名稱
SELECT cron.alter_job(job_id:=MyJobID,database:='NewDBName');
pg_failover_slots
使用邏輯複寫和已啟用高可用性的伺服器運作時,PG 容錯移轉位置延伸模組可強化適用於 PostgreSQL 的 Azure 資料庫彈性伺服器。 它可有效解決容錯移轉之後不會保留邏輯複寫位置的標準 PostgreSQL 引擎問題。 維護這些位置對於防止在主要伺服器角色變更期間複寫暫停或資料不符非常重要,確保作業持續性和資料完整性。
延伸模組可藉由管理複寫位置的必要傳輸、清除和同步處理,簡化容錯移轉程序,藉此在伺服器角色變更期間提供順暢的轉換。 PostgreSQL 版本 11 到 16 支援此延伸模組。
如需詳細資訊及 PG 容錯移轉位置延伸模組的使用方式,請參閱 GitHub 頁面。
啟用 pg_failover_slots
若要為適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體啟用 PG 容錯移轉位置延伸模組,您必須在伺服器的共用預先載入程式庫中併入該延伸模組,並調整特定的伺服器參數,以修改伺服器設定。 程序如下:
- 藉由更新
shared_preload_libraries
參數,將pg_failover_slots
新增至伺服器的共用預先載入程式庫。 - 將伺服器參數
hot_standby_feedback
變更為on
。
shared_preload_libraries
參數的任何變更都需要重新啟動伺服器才會生效。
使用 Azure 入口網站:
- 選取適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器執行個體。
- 從資源功能表的 [設定] 區段下,選取 [伺服器參數]。
- 搜尋
shared_preload_libraries
參數,並編輯其值以包含pg_failover_slots
。 - 搜尋
hot_standby_feedback
參數,並將其值設定為on
。 - 選取 [儲存] 以保留變更。 現在,您可以選擇 [儲存並重新啟動]。 選擇此選項以確保變更生效,因為修改
shared_preload_libraries
需要重新啟動伺服器。
藉由選取 [儲存並重新啟動],您的伺服器會自動重新啟動,並套用您剛做的變更。 伺服器重新上線後,PG 容錯移轉位置延伸模組即會啟用,並在主要的適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體上運作,準備好在容錯移轉期間處理邏輯複寫位置。
pg_hint_plan
pg_hint_plan
可讓您在 SQL 註解中使用所謂的提示來調校 PostgreSQL 執行計畫,例如:
/*+ SeqScan(a) */
pg_hint_plan
會在目標 SQL 陳述式指定的特殊格式註解中讀取提示詞語。 特殊格式的開頭為字元序列 "/*+",並以 "*/" 結尾。 提示詞語包含提示名稱,以及以括弧括住的下列參數,並以空格分隔。 基於可讀性而換行可以分隔每個提示詞語。
範例:
/*+
HashJoin(a b)
SeqScan(a)
*/
SELECT *
FROM pgbench_branches b
JOIN pgbench_accounts an ON b.bid = a.bid
ORDER BY a.aid;
上述範例會讓規劃工具對資料表 a 使用 seq scan
的結果,與資料表 b 合併為 hash join
。
若要安裝 pg_hint_plan,除了建立其允許清單,如如何使用 PostgreSQL 延伸模組所示,您還需要將其包含在伺服器的共用預先載入程式庫中。 需要重新啟動伺服器,對 Postgres shared_preload_libraries
參數的變更才會生效。 您可以使用 Azure 入口網站或 Azure CLI 來變更參數。
使用 Azure 入口網站:
- 選取適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器執行個體。
- 從資源功能表的 [設定] 區段下,選取 [伺服器參數]。
- 搜尋
shared_preload_libraries
參數,並編輯其值以包含pg_hint_plan
。 - 選取 [儲存] 以保留變更。 現在,您可以選擇 [儲存並重新啟動]。 選擇此選項以確保變更生效,因為修改
shared_preload_libraries
需要重新啟動伺服器。 您現在可以在適用於 PostgreSQL 的 Azure 資料庫彈性伺服器資料庫中啟用 pg_hint_plan。 連線至資料庫並發出下列命令:
CREATE EXTENSION pg_hint_plan;
pg_prewarm
pg_prewarm
延伸模組會將關聯式資料載入快取。 預先載入快取表示重新開機後,查詢在第一次執行時有較佳的回應時間。 適用於 PostgreSQL 的 Azure 資料庫彈性伺服器目前無法使用自動預先載入功能。
pg_repack
人員第一次嘗試使用此延伸模組時通常詢問的問題是:pg_repack 是延伸模組,還是用戶端可執行檔 (例如 psql 或 pg_dump)?
答案是實際上兩者都正確。 pg_repack/lib 保留延伸模組的程式碼,包含建立的結構描述和 SQL Artifacts,以及實作其中數個函式程式碼的 C 程式庫。 另一方面,pg_repack/bin 保留用戶端應用程式的程式碼,期知道如何與延伸模組建立的可程式性 Artifacts 互動。 此用戶端應用程式旨在簡化與伺服器端延伸模組所呈現不同介面互動的複雜度,方法是為使用者提供一些易於了解的命令列選項。 未在所指向資料庫上建立延伸模組的用戶端伺服器便無法使用。 伺服器端應用程式本身可完全正常運作,但會需要使用者了解複雜的互動模式,包含執行查詢以將作為輸入的資料擷取至延伸模組實作的函式。
結構描述重新封裝的權限遭拒
到目前為止,由於我們授與此延伸模組所建立的重新封裝結構描述權限方式,因此僅支援從 azure_pg_admin
環境執行 pg_repack 功能。
您可能會注意到,如果資料表的擁有者不是 azure_pg_admin
並嘗試執行 pg_repack,則最終會收到下列錯誤:
NOTICE: Setting up workers.conns
ERROR: pg_repack failed with error: ERROR: permission denied for schema repack
LINE 1: select repack.version(), repack.version_sql()
若要避免錯誤,請確保從 azure_pg_admin
環境執行 pg_repack。
pg_stat_statements
pg_stat_statements 延伸模組可讓您檢視已在資料庫上執行的所有查詢。 這對於瞭解您在生產系統上的查詢工作負載效能非常實用。
每個適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體的 shared_preload_libraries
中已預先載入 pg_stat_statements 延伸模組,以便您追蹤 SQL 陳述式的執行統計資料。
不過,基於安全性考量,您仍然需要建立 pg_stat_statements extension 延伸模組的允許清單,並使用 CREATE EXTENSION 命令進行安裝。
控制延伸模組計入哪些陳述式的設定 pg_stat_statements.track
預設為 top
,這表示會追蹤用戶端直接發出的所有陳述式。 其他兩個會追蹤層級 none
和 all
。 這項設定可設定為伺服器參數。
由 pg_stat_statements
所提供的查詢執行資訊,和在伺服器效能上造成的影響之間,會有交換的行為,因為它會記錄每個 SQL 陳述式。 如果您不會經常使用 pg_stat_statements
延伸模組,建議您將 pg_stat_statements.track
設定為 none
。 某些第三方監視服務可能會需要 pg_stat_statements
傳遞查詢效能深入解析,因此請確認這是否為您的情況。
postgres_fdw
postgres_fdw 可讓您從一個適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體連線到另一個執行個體,或連線到相同伺服器中的另一個資料庫。 適用於 PostgreSQL 的 Azure 資料庫彈性伺服器支援任何 PostgreSQL 伺服器的傳入和傳出連線。 傳送伺服器需要允許對接收伺服器的輸出連線。 同樣地,接收伺服器需要允許來自傳送伺服器的連線。
如果您打算使用此延伸模組,我們建議您使用虛擬網路整合來部署伺服器。 依預設,虛擬網路整合允許虛擬網路中伺服器之間的連線。 您也可以選擇使用虛擬網路網路安全性群組來自訂存取。
pgstattuple
使用 'pgstattuple' 擴充功能嘗試從 Postgres 11 到 13 版本中保留 pg_toast
的物件取得 Tuple 統計數據時,您會收到「架構pg_toast遭到拒絕的許可權」錯誤。
架構pg_toast的許可權遭拒
在適用於彈性伺服器的 Azure 資料庫上使用 PostgreSQL 第 11 至 13 版的客戶,無法在 pgstattuple
架構內 pg_toast
的物件上使用擴充功能。
在 PostgreSQL 16 和 17 中, pg_read_all_data
角色會自動授與給 azure_pg_admin
,允許 pgstattuple
正確運作。 在 PostgreSQL 14 和 15 中,客戶可以手動授 pg_read_all_data
與角色以 azure_pg_admin
達到相同的結果。 不過,在 PostgreSQL 11 到 13 中, pg_read_all_data
角色不存在。
客戶無法直接授與必要的許可權。 如果您需要能夠執行 pgstattuple
以存取架構底下pg_toast
的物件,請繼續建立 Azure 支援 要求。
TimescaleDB
TimescaleDB 是封裝為 PostgreSQL 延伸模組的時間序列資料庫。 TimescaleDB 提供時間導向的分析函式、最佳化,可調整 Postgres 來處理時間序列工作負載。 深入了解 TimescaleDB (Timescale, Inc. 的註冊商標)。適用於 PostgreSQL 的 Azure 資料庫彈性伺服器提供 TimescaleDB Apache-2 版本。
安裝 TimescaleDB
若要安裝 TimescaleDB,除了建立其允許清單,如上所示,您還需要將它加入伺服器的共用預先載入程式庫中。 需要重新啟動伺服器,對 Postgres shared_preload_libraries
參數的變更才會生效。 您可以使用 Azure 入口網站或 Azure CLI 來變更參數。
使用 Azure 入口網站:
- 選取適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器執行個體。
- 從資源功能表的 [設定] 區段下,選取 [伺服器參數]。
- 搜尋
shared_preload_libraries
參數,並編輯其值以包含TimescaleDB
。 - 選取 [儲存] 以保留變更。 現在,您可以選擇 [儲存並重新啟動]。 選擇此選項以確保變更生效,因為修改
shared_preload_libraries
需要重新啟動伺服器。 您現在可以在適用於 PostgreSQL 的 Azure 資料庫彈性伺服器資料庫中啟用 TimescaleDB。 連線至資料庫並發出下列命令:
CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;
提示
如果您看到錯誤,請確認您在儲存 shared_preload_libraries 之後已重新啟動伺服器。
您現在可以從頭開始建立 TimescaleDB hypertable,或遷移 PostgreSQL 中現有的時間序列資料。
使用 pg_dump 和 pg_restore 還原 Timescale 資料庫
若要使用 pg_dump 和 pg_restore 來還原 Timescale 資料庫,您必須在目的地資料庫中執行兩個輔助程序:timescaledb_pre_restore()
和 timescaledb_post restore()
。
首先,準備目的地資料庫:
--create the new database where you want to perform the restore
CREATE DATABASE tutorial;
\c tutorial --connect to the database
CREATE EXTENSION timescaledb;
SELECT timescaledb_pre_restore();
現在您可以在原始資料庫上執行 pg_dump,然後再執行 pg_restore。 還原之後,請務必在還原的資料庫中執行下列命令:
SELECT timescaledb_post_restore();
有關已啟用 Timescale 的資料庫可用的還原方法,如需詳細資訊,請參閱 Timescale 文件。
使用 timescaledb-backup 還原 Timescale 資料庫
執行上述 SELECT timescaledb_post_restore()
程序時,可能發生關於更新 timescaledb.restoring 旗標的權限遭拒錯誤。 這是因為在 Cloud PaaS 資料庫服務中,ALTER DATABASE 權限受限。 在此情況下,您可以採取另一種作法,使用 timescaledb-backup
工具來備份和還原 Timescale 資料庫。 Timescaledb-backup 這個程式可讓您在傾印和還原 TimescaleDB 資料庫時,更輕鬆、更不易出錯也更有效率。
作法如下
- 如此處所詳述安裝工具
- 建立目標適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體和資料庫
- 如上所示啟用 Timescale 延伸模組
- 將
azure_pg_admin
角色授與 ts-restore 使用的使用者 - 執行 ts-restore 以還原資料庫
如需這些公用程式的詳細資訊,請參閱此處。
延伸模組和主要版本升級
適用於 PostgreSQL 的 Azure 資料庫彈性伺服器引進了就地主要版本升級功能,只要按一下,即可執行適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體的就地升級。 就地主要版本升級可簡化適用於 PostgreSQL 的 Azure 資料庫彈性伺服器升級程序,將存取伺服器的使用者和應用程式中斷降至最低。 就地主要版本升級不支援特定延伸模組,而且升級某些延伸模組有一些限制。 使用就地主要版本更新功能時,不支援擴充功能 anon、Apache AGE、dblink、orafce、pgaudit、postgres_fdw和 Timescaledb 的所有 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器版本。