「適用於 PostgreSQL 的 Azure 資料庫」彈性伺服器中的 PostgreSQL 延伸模組
適用範圍:適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器
適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器可讓您使用擴充功能擴充資料庫的功能。 延伸模組會搭配單一套件中的多個相關 SQL 物件,以命令從資料庫載入或移除。 載入資料庫之後,擴充功能會像內建功能一樣運作。
如何使用 PostgreSQL 擴充功能
在 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器中安裝擴充功能之前,您必須允許列出這些延伸模組以供使用。
使用 Azure 入口網站:
使用 Azure CLI:
您可以透過 CLI 參數集 命令來允許列出延伸模組。
az postgres flexible-server parameter set --resource-group <your resource group> --server-name <your server name> --subscription <your subscription id> --name azure.extensions --value <extension name>,<extension name>
使用 ARM 範本:下列 allowlists extensions dblink、 dict_xsyn, pg_buffercache伺服器 mypostgreserver 上的範例
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"flexibleServers_name": {
"defaultValue": "mypostgreserver",
"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
參數。 - 選取您想要新增的延伸模組。
使用 Azure CLI:
您可以透過 CLI 參數集命令進行設定。shared_preload_libraries
az postgres flexible-server parameter set --resource-group <your resource group> --server-name <your server name> --subscription <your subscription id> --name shared_preload_libraries --value <extension name>,<extension name>
在允許列出並載入擴充功能之後,這些延伸模組必須先安裝在您的資料庫中,才能使用它們。 若要安裝特定擴充功能,您應該執行 CREATE EXTENSION 命令。 此命令會將封裝的物件載入您的資料庫。
注意
適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器中提供的第三方延伸模組是 開放原始碼 授權碼。 目前,我們不會提供任何具有進階或專屬授權模型的第三方延伸模組或擴充功能版本。
適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器實例支援下列主要 PostgreSQL 擴充功能子集。 此資訊也可以藉由執行 SHOW azure.extensions;
來取得。 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器不支援此檔中未列出的擴充功能。 您無法在 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器中建立或載入自己的擴充功能。
延伸模組版本
適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器提供下列擴充功能:
注意
下表中具有標記的✔️延伸模組,需要在伺服器參數中 shared_preload_libraries
啟用其對應的連結庫。
延伸模組名稱 | 說明 | PostgreSQL 16 | PostgreSQL 15 (英文) | PostgreSQL 14 | PostgreSQL 13 | PostgreSQL 12 | PostgreSQL 11 |
---|---|---|---|---|---|---|---|
address_standardizer | 用來將位址剖析為組成項目。 通常用來支援地理編碼位址正規化步驟。 | 3.3.3 | 3.3.1 | 3.2.3 | 3.2.3 | 3.2.3 | 3.2.3 |
address_standardizer_data_us | 地址標準化美國數據集範例 | 3.3.3 | 3.3.1 | 3.2.3 | 3.2.3 | 3.2.3 | 3.2.3 |
amcheck | 用於驗證關聯完整性的函式 | 1.3 | 1.3 | 1.3 | 1.2 | 1.2 | 1.1 |
anon (預覽) | 數據匿名工具 | 1.2.0 ✔️ | 1.2.0 ✔️ | 1.2.0 ✔️ | 1.2.0 ✔️ | 1.2.0 ✔️ | 1.2.0 ✔️ |
azure_ai | 適用於 PostgreSQL 的 Azure AI 和 ML 服務整合 | 1.0.0 | 1.1.0 | 1.0.0 | 1.0.0 | 1.0.0 | N/A |
azure_storage | 適用於 PostgreSQL 的 Azure 整合 | 1.4 ✔️ | 1.4 ✔️ | 1.4 ✔️ | 1.4 ✔️ | 1.4 ✔️ | N/A |
bloom | Bloom 存取方法 - 簽章檔案型索引 | 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 |
btree_gist | 支援在 GiST 中編制通用資料類型的索引 | 1.7 | 1.7 | 1.6 | 1.5 | 1.5 | 1.5 |
citext | 不區分大小寫字元字串的數據類型 | 1.6 | 1.6 | 1.6 | 1.6 | 1.6 | 1.5 |
cube | 多維度 Cube 的數據類型 | 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 |
dict_int | 整數的文字搜尋字典範本 | 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 |
earthdistance | 計算地球表面的大圓距離 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 |
fuzzystrmatch | 判斷字串之間的相似性和距離 | 1.2 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 |
hstore | 用於儲存一組 (索引鍵、值) 組的數據類型 | 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 |
intagg | 整數匯總器和列舉值(已過時) | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 |
intarray | 整數 1D 陣列的函數、運算元和索引支援 | 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 |
lo | 大型物件維護 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 |
login_hook | Login_hook - 攔截以在登入時間執行 login_hook.login() | 1.5 | 1.4 | 1.4 | 1.4 | 1.4 | 1.4 |
ltree | 階層式樹狀結構的數據類型 | 1.2 | 1.2 | 1.2 | 1.2 | 1.1 | 1.1 |
orafce | 從 Oracle RDBMS 模擬函式和套件子集的函式和運算符 | 4.4 | 3.24 | 3.18 | 3.18 | 3.18 | 3.7 |
pageinspect | 在低層級檢查資料庫頁面的內容 | 1.12 | 1.11 | 1.9 | 1.8 | 1.7 | 1.7 |
pgaudit | 提供稽核功能 | 16.0 ✔️ | 1.7 ✔️ | 1.6.2 ✔️ | 1.5 ✔️ | 1.4 ✔️ | 1.3.2 ✔️ |
pg_buffercache | 檢查共用緩衝區快取 | 1.4 | 1.3 | 1.3 | 1.3 | 1.3 | 1.3 |
pg_cron | PostgreSQL 的作業排程器 | 1.5 ✔️ | 1.4-1 ✔️ | 1.4-1 ✔️ | 1.4-1 ✔️ | 1.4-1 ✔️ | 1.4-1 ✔️ |
pgcrypto | 密碼編譯函式 | 1.3 | 1.3 | 1.3 | 1.3 | 1.3 | 1.3 |
pg_failover_slots (預覽) | 用於故障轉移的邏輯復寫位置管理員 | 1.0.1 | 1.0.1 | 1.0.1 | 1.0.1 | 1.0.1 | 1.0.1 |
pg_freespacemap | 檢查可用空間地圖 (FSM) | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 |
pg_hint_plan | 可讓您在 SQL 批注中使用所謂的提示來調整 PostgreSQL 執行計劃。 | 1.6.0 ✔️ | 1.5 ✔️ | 1.4 ✔️ | 1.3.7 ✔️ | 1.3.7 ✔️ | 1.3.7 ✔️ |
pglogical | PostgreSQL 邏輯複寫 | 2.4.4 ✔️ | 2.4.2 ✔️ | 2.4.1 ✔️ | 2.4.1 ✔️ | 2.4.1 ✔️ | 2.4.1 ✔️ |
pg_partman | 依時間或標識碼管理分割數據表的擴充功能 | 4.7.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 ✔️ |
pg_repack | 使用最少鎖定重新組織 PostgreSQL 資料庫中的數據表 | 1.4.7 | 1.4.7 | 1.4.7 | 1.4.7 | 1.4.7 | 1.4.7 |
剪除 | PgRouting 擴充功能 | 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 |
pg_squeeze | 從關聯中移除未使用空間的工具。 | 1.6 ✔️ | 1.6 ✔️ | 1.5 ✔️ | 1.5 ✔️ | 1.5 ✔️ | 1.5 ✔️ |
pg_stat_statements | 追蹤所有執行之 SQL 語句的規劃和執行統計數據 | 1.10 ✔️ | 1.10 ✔️ | 1.9 ✔️ | 1.8 ✔️ | 1.7 ✔️ | 1.6 ✔️ |
pgstattuple | 顯示 Tuple 層級統計數據 | 1.5 | 1.5 | 1.5 | 1.5 | 1.5 | 1.5 |
pg_trgm | 以三格為基礎的文字相似度測量和索引搜尋 | 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 |
plpgsql | PL/pgSQL 程序語言 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 |
plv8 | PL/JavaScript (v8) 信任的程序語言 | 3.1.7 | 3.1.7 | 3.0.0 | 3.0.0 | 3.0.0 | 3.0.0 |
postgis | PostGIS 幾何和地理空間類型和函式 | 3.3.3 | 3.3.1 | 3.2.3 | 3.2.3 | 3.2.3 | 3.2.3 |
postgis_raster | PostGIS 點陣類型和函式 | 3.3.3 | 3.3.1 | 3.2.3 | 3.2.3 | 3.2.3 | 3.2.3 |
postgis_sfcgal | PostGIS SFCGAL 函式 | 3.3.3 | 3.3.1 | 3.2.3 | 3.2.3 | 3.2.3 | 3.2.3 |
postgis_tiger_geocoder | PostGIS tiger geocoder and reverse geocoder | 3.3.3 | 3.3.1 | 3.2.3 | 3.2.3 | 3.2.3 | 3.2.3 |
postgis_topology | PostGIS 拓撲空間類型和函式 | 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.0 | 1.0 | 1.0 |
semver | 語意版本數據類型 | 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 |
sslinfo | SSL 憑證的相關信息 | 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 |
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 |
timescaledb | 針對時間序列數據啟用可調整的插入和複雜的查詢 | 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 |
tsm_system_time | TABLESAMPLE 方法,接受以毫秒為單位的時間作為限制 | 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 |
uuid-ossp | 產生通用唯一識別碼 (UUIDs) | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 |
vector | 向量數據類型和ivfflat和 hnsw 存取方法 | 0.6.1 | 0.6.1 | 0.6.1 | 0.6.1 | 0.6.1 | 0.5.1 |
dblink and postgres_fdw
dblink 和 postgres_fdw可讓您從一個 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器實例連線到另一個伺服器實例,或連線到相同伺服器中的另一個資料庫。 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器同時支援任何 PostgreSQL 伺服器的連入和連出連線。 傳送伺服器必須允許對接收伺服器的輸出連線。 同樣地,接收伺服器必須允許來自傳送伺服器的連線。
如果您打算使用這兩個 延伸模組,建議您使用虛擬網路整合 來部署伺服器。 根據預設,虛擬網路整合允許虛擬網路中的伺服器之間的連線。 您也可以選擇使用 虛擬網路安全組 來自定義存取權。
pg_prewarm
延伸模組會將 pg_prewarm
關係型數據載入快取。 預先驗證快取表示您的查詢在重新啟動后第一次執行時會有較佳的響應時間。 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器目前無法使用自動預先功能。
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'$$);
若要在預設資料庫中 postgres
每天上午 10:00 (GMT) 執行真空。
SELECT cron.schedule('0 10 * * *', 'VACUUM');
從取消排程所有工作 pg_cron
。
SELECT cron.unschedule(jobid) FROM cron.job;
若要查看目前使用 pg_cron
排程的所有作業。
SELECT * FROM cron.job;
若要在azure_pg_admin角色帳戶下的資料庫 『testcron』 中每天上午 10:00 執行真空。
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 資料庫 彈性伺服器不支援。 上述範例顯示以選擇性使用者名稱參數 ommitted 執行此函式,或設定為 null,這會在使用者排程作業的內容中執行作業,其應該具有azure_pg_admin角色許可權。
更新或變更現有排程的資料庫名稱
SELECT cron.alter_job(job_id:=MyJobID,database:='NewDBName');
pg_failover_slots (預覽)
當使用邏輯復寫和已啟用高可用性的伺服器運作時,PG 故障轉移位置擴充功能可增強 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器。 它可有效地解決在故障轉移之後不會保留邏輯複寫位置的標準 PostgreSQL 引擎內的挑戰。 維護這些位置對於防止在主伺服器角色變更期間復寫暫停或數據不符非常重要,以確保作業持續性和數據完整性。
擴充功能可藉由管理複寫位置的必要傳輸、清除和同步處理,以簡化故障轉移程式,從而在伺服器角色變更期間提供順暢的轉換。 PostgreSQL 版本 11 到 16 支援擴充功能。
您可以在 GitHub 頁面上找到詳細資訊及如何使用 PG 故障轉移位置擴充功能。
啟用pg_failover_slots
若要為 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器實例啟用 PG 故障轉移位置擴充功能,您必須在伺服器的共用預先載入連結庫中加入擴充功能並調整特定伺服器參數,以修改伺服器的組態。 程序如下:
- 藉由更新
shared_preload_libraries
參數,將 新增pg_failover_slots
至伺服器的共用預先載入連結庫。 - 伺服器參數
hot_standby_feedback
變更為on
。
參數的任何變更 shared_preload_libraries
都需要重新啟動伺服器才會生效。
在 Azure 入口網站中遵循以下步驟:
- 登入 Azure 入口網站,並移至您的 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器實例頁面。
- 在左側功能表中,選取 [伺服器參數]。
shared_preload_libraries
在清單中尋找 參數,並編輯其值以包含pg_failover_slots
。- 搜尋 參數,
hot_standby_feedback
並將其值設定為on
。 - 選取 [儲存 ] 以保留您的變更。 現在,您可以選擇 [ 儲存並重新啟動]。 選擇此選項以確保變更生效,因為修改
shared_preload_libraries
需要重新啟動伺服器。
藉由選取 [ 儲存並重新啟動],您的伺服器會自動重新啟動,並套用您所做的變更。 伺服器重新上線后,就會啟用PG故障轉移位置擴充功能,並在主要 適用於 PostgreSQL 的 Azure 資料庫彈性伺服器實例上運作,準備好在故障轉移期間處理邏輯複寫位置。
pg_stat_statements
pg_stat_statements延伸模組可讓您檢視已在資料庫上執行的所有查詢。 這有助於了解查詢工作負載效能在生產系統上的外觀。
pg_stat_statements擴充功能會在每個 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器實例上預先載入shared_preload_libraries
,以提供追蹤 SQL 語句的執行統計數據的方法。
不過,基於安全性考慮,您仍然需要允許列出pg_stat_statements擴充功能,並使用 CREATE EXTENSION 命令加以安裝。
設定 pg_stat_statements.track
會控制擴充功能計算哪些語句,預設為 top
,這表示會追蹤用戶端直接發出的所有語句。 其他兩個會追蹤層級 none
和 all
。 這項設定可設定為伺服器參數。
查詢執行資訊在記錄每個 SQL 語句時,會提供查詢執行資訊 pg_stat_statements
,以及對伺服器效能的影響。 如果您未主動使用 pg_stat_statements
擴充功能,建議您將 設定 pg_stat_statements.track
為 none
。 某些第三方監視服務可能依賴 pg_stat_statements
來提供查詢效能深入解析,因此請確認這是否適合您。
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]。
選取 [ 儲存] 以保留變更。 儲存變更之後,您會收到通知。
通知之後, 請重新啟動 伺服器以套用這些變更。
您現在可以在 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器資料庫中啟用 TimescaleDB。 連線 至資料庫併發出下列命令:
CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;
提示
如果您看到錯誤,請確認您在 儲存shared_preload_libraries之後重新啟動伺服器 。
您現在可以從頭開始建立 TimescaleDB 超數據表,或在 PostgreSQL 中移轉現有的時間序列數據。
使用pg_dump和pg_restore還原時幅資料庫
若要使用pg_dump和pg_restore還原時幅資料庫,您必須在目的地資料庫中執行兩個協助程式程式: timescaledb_pre_restore()
和 timescaledb_post restore()
。
首先,準備目的地資料庫:
--create the new database where you'll 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();
如需使用已啟用時幅資料庫還原方法的詳細資訊,請參閱 時幅檔。
使用 timescaledb-backup 還原時幅資料庫
SELECT timescaledb_post_restore()
執行上述程式時,您可能會在更新 timescaledb.restoring 旗標時收到許可權遭拒的錯誤。 這是因為 Cloud PaaS 資料庫服務中的 ALTER DATABASE 許可權有限。 在此情況下,您可以使用工具來備份和還原時幅資料庫,執行替代方法 timescaledb-backup
。 Timescaledb-backup 是一個程式,可讓傾印和還原 TimescaleDB 資料庫更簡單、容易出錯且效能更高。
若要這樣做,您應該執行下列動作
- 如這裡所述 安裝工具
- 建立目標 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器實例和資料庫
- 啟用時幅擴充功能,如上所示
- 將角色授
azure_pg_admin
與 ts-restore 將使用 的使用者 - 執行 ts-restore 以還原 資料庫
如需這些公用程式的詳細資訊,請參閱 這裡。
注意
使用timescale-backup
公用程式還原至 Azure 時,因為 適用於 PostgreSQL 的 Azure 資料庫 單一伺服器的資料庫使用者名稱必須使用 <user@db-name>
格式,您必須以字元編碼取代 @
%40
。
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;
這個範例會讓 planner 在 seq scan
資料表上使用 的結果,將資料表 b 合併為 hash join
。
若要安裝pg_hint_plan,此外,若要允許列出它,如上所示,您需要將它包含在伺服器的共用預先載入連結庫中。 Postgres 參數的 shared_preload_libraries
變更需要 重新啟動 伺服器才會生效。 您可以使用 Azure 入口網站 或 Azure CLI 來變更參數。
使用 Azure 入口網站:
選取您的 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器實例。
在提要欄位中,選取 [伺服器參數]。
搜尋
shared_preload_libraries
參數。選取 [pg_hint_plan]。
選取 [ 儲存] 以保留變更。 儲存變更之後,您會收到通知。
通知之後, 請重新啟動 伺服器以套用這些變更。
您現在可以啟用pg_hint_plan 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器資料庫。 連線 資料庫併發出下列命令:
CREATE EXTENSION pg_hint_plan;
pg_buffercache
Pg_buffercache
可用來研究shared_buffers的內容。 使用此 延伸模組 ,您可以判斷特定關聯是否已快取(在 中 shared_buffers
)。 此延伸模組可協助您針對效能問題進行疑難解答(快取相關的效能問題)。
這是contrib的一部分,而且很容易安裝此延伸模組。
CREATE EXTENSION pg_buffercache;
擴充功能和主要版本升級
適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器引進了就地主要版本升級功能,只要按兩下即可執行 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器實例的就地升級。 就地主要版本升級可簡化 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器升級程式,將存取伺服器的使用者和應用程式中斷降至最低。 就地主要版本升級不支援特定的擴充功能,而且升級某些擴充功能有一些限制。 使用就地主要版本更新功能時,不支援所有 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器版本的擴充功能 Timescaledb、pgaudit、dblink、orafce 和 postgres_fdw。