本文說明在 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器中使用特定擴充功能或模組時,您必須注意的一些特殊考慮。
擴充功能的一般考慮
若要在 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器中使用擴充功能,您必須:
-
允許擴充功能。 如果不允許擴充功能,則任何嘗試執行
CREATE EXTENSION
、ALTER EXTENSION
DROP EXTENSION
、 或COMMENT ON EXTENSION
會失敗,並出現錯誤,指出不允許參考的延伸模組。 - 如果擴充功能部署一些需要配置和存取共用記憶體的共用二進位連結庫,而且必須在伺服器啟動時載入,您也應該遵循載入連結庫中提供的指示。
- 在您想要擴充功能部署以該延伸模組散發的 SQL 物件之資料庫中建立擴充 功能。
- 卸除延伸模組。 當您想要從資料庫中移除時,您要在其中執行該擴充功能所散發的所有 SQL 物件。
- 更新擴充功能,以更新至其最新版本,所有已安裝之擴充功能所部署的 SQL 成品。
- 檢視已安裝的延伸模組 及其對應的版本。
如果您在 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器上執行CREATE EXTENSION
、ALTER EXTENSION
DROP EXTENSION
或 COMMENT ON EXTENSION
命令時收到任何錯誤,請參閱可能的錯誤清單,以及每個錯誤的原因。
模組的一般考慮
若要在 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器中使用模組,您只需要將模組新增至shared_preload_libraries
伺服器參數,如載入連結庫中所述。
模組不需要 列入允許清單。 這是延伸模組的獨佔需求。
具有特定考慮的擴充功能
下列清單列舉在 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器中使用時,需要特定考慮的所有支援擴充功能:
AGE
dblink
pg_buffercache
pg_cron
pg_hint_plan
pg_prewarm
pg_repack
pg_stat_statements
postgres_fdw
pgstattuple
年齡
Apache AGE 擴充模組是 Azure 資料庫彈性伺服器所支援的適用於 PostgreSQL 的圖形擴充模組。 它提供圖形資料庫功能、開啟 cypher 查詢支援,以及在 PostgreSQL 中儲存的圖形數據上執行複雜查詢的能力。 'Apache AGE' 是以 Apache 授權 2.0 發行的開放原始碼專案。
安裝 AGE
若要使用 AGE,請確定您 'allowlist' 延伸模組、 「載入其連結庫」,以及在您打算使用其功能的資料庫中 安裝擴充 功能。
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
模組可以平行執行多個作業,但它一次最多執行一個作業實例。 如果第二次執行應該在第一次執行完成之前開始,則第二次執行會排入佇列,並在第一次執行完成時立即開始。 如此一來,它可確保作業能精確執行排程的次數,且不會與自己同時執行。
請確定已設定的值 shared_preload_libraries
包含 pg_cron
。 此擴充功能不支援將連結庫載入為執行 CREATE EXTENSION 的效果。 如果擴充功能未新增至 shared_preload_libraries
,或伺服器新增後未重新啟動,則任何嘗試執行 CREATE EXTENSION 時,都會導致文字指出 pg_cron can only be loaded via shared_preload_libraries
的錯誤,且其提示為 Add pg_cron to the shared_preload_libraries configuration variable in postgresql.conf
。
若要使用 pg_cron
,請務必 在伺服器啟動時載入其共享連結庫,且它已 列入允許清單,而且會 安裝在 您想要與其功能互動的任何資料庫中,並使用它所建立的 SQL 成品。
範例
若要刪除週六上午 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;
若要在角色帳戶下的資料庫每天上午 10:00(GMT)執行
test cron
azure_pg_admin
真空。SELECT cron.schedule_in_database('VACUUM',' 0 10 * * * ', 'VACUUM', 'testcron',null,TRUE);
更多範例
從 pg_cron
1.4 版開始,您可以使用 cron.schedule_in_database
和 cron.alter_job
函式來排程特定資料庫中的工作,並分別更新現有的排程。
函 cron_schedule_in_database
式允許使用者名稱做為選擇性參數。 將使用者名稱設定為非 Null 值需要 PostgreSQL 超級用戶權力,且 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器不支援。 上述範例顯示以省略或設定為 null 的選擇性使用者名稱參數執行此函式,這會在使用者排程作業的內容中執行作業,而該作業應具有 azure_pg_admin
角色許可權。
若要在星期六上午 3:30 (GMT) 刪除資料庫 DBName 上的舊數據。
SELECT cron.schedule_in_database('JobName', '30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$,'DBName');
更新或變更現有排程的資料庫名稱
SELECT cron.alter_job(job_id:=MyJobID,database:='NewDBName');
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;
上一個seqscan
範例會讓規劃工具使用 資料表的結果,將資料表與資料表a
b
合併為 hashjoin
。
若要使用 pg_hint_plan
擴充功能,請確定您 允許列出 擴充功能、 載入其連結庫,並在 您打算使用其功能的資料庫中安裝擴充 功能。
pg_prewarm
延伸模組會將 pg_prewarm
關係型數據載入快取。 預先驗證快取表示您的查詢在重新啟動后第一次執行時會有更好的回應時間。 PostgreSQL 彈性伺服器的自動準備功能目前無法在 Azure 資料庫中使用。
pg_repack
延伸模組的使用者 pg_repack
第一次通常會問下列問題:延伸模組或用戶端可執行檔案是否 pg_repack
類似 psql
或 pg_dump
?
pg_repack實際上是兩者。 pg_repack/lib 具有延伸模組的程序代碼,包括所建立的架構和 SQL 成品,以及實作其中數個函式程式代碼的 C 連結庫。
另一方面, pg_repack/bin 具有用戶端應用程式的程序代碼,其知道如何與延伸模組中實作的程式設計項目互動。 此用戶端應用程式旨在簡化與伺服器端延伸模組所呈現之不同介面互動的複雜性。 它為使用者提供了一些更容易瞭解的命令行選項。 用戶端應用程式沒有在所指向的資料庫上建立的擴充功能,就無用處。 伺服器端擴充功能本身會完全正常運作,但會要求使用者瞭解複雜的互動模式。 該模式會包含執行查詢,以擷取做為延伸模組所實作函式輸入的數據等等。
結構描述重新封裝的權限遭拒
目前,因為我們將許可權授與此延伸模組所建立的重新封裝架構,所以我們只支援從的內容pg_repack
執行azure_pg_admin
功能。
您可能會注意到,如果資料表的擁有者不是 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延伸模組可讓您檢視在資料庫上執行的所有查詢。 這項資訊有助於瞭解生產系統上的查詢工作負載效能。
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
來提供查詢效能深入解析,因此請確認是否適合您。
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擴充功能的時間序列資料庫。 它提供時間導向的分析函式和優化,並針對時間序列工作負載調整 Postgres。
深入了解 TimescaleDB (Timescale, Inc. 的註冊商標)。適用於 PostgreSQL 的 Azure 資料庫彈性伺服器提供 TimescaleDB Apache-2 版本。
安裝 TimescaleDB
若要使用 timescaleDB
,請確定您 允許列出 延伸模組、 載入其連結庫,並在 您打算使用其功能的資料庫中安裝擴充 功能。
您現在可以從頭開始建立 TimescaleDB hypertable,或遷移 PostgreSQL 中現有的時間序列資料。
如需使用 pg_dump
和 pg_restore
還原時幅資料庫的詳細資訊,請參閱 時幅檔。
使用 timescaledb-backup 還原 Timescale 資料庫
執行 SELECT timescaledb_post_restore()
程式時,您可能會在更新 timescaledb.restoring 旗標時收到拒絕的許可權。 之所以收到此錯誤,是因為 Cloud PaaS 資料庫服務中的 ALTER DATABASE 許可權有限。 在此情況下,您可以使用 工具來備份和還原時幅資料庫,執行替代方法 timescaledb-backup
。 Timescaledb-backup 是一個程式,可讓傾印和還原 TimescaleDB 資料庫更簡單、容易出錯且效能更高。
若要如此做,請執行下列步驟:
如這裡所述安裝工具。
建立目標 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器實例和資料庫。
啟用時幅擴充功能。
將
azure_pg_admin
角色授與 ts-restore 所使用的使用者。執行 ts-restore 以還原 資料庫。
如需這些公用程式的詳細資訊,請參閱此處。
擴充功能和主要版本升級
適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器提供就地主要版本升級功能,此功能會執行 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器實例的就地升級,只需與使用者進行簡單的互動。 就地主要版本升級可簡化適用於 PostgreSQL 的 Azure 資料庫彈性伺服器升級程序,將存取伺服器的使用者和應用程式中斷降至最低。 就地主要版本升級不支援特定的擴充功能,而且升級某些擴充功能有一些限制。
anon
使用就地主要版本更新功能時,所有 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器版本都不支援延伸模組 、Apache AGE
dblink
、orafce
、、pgaudit
postgres_fdw
、 和 timescaledb
。
具有特定考慮的模組
下列清單列舉在 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器中使用時,需要特定考慮的所有支援模組:
pg_failover_slots
pg_failover_slots
當運作於啟用邏輯複寫功能和高可用性功能的伺服器時,此 pg_failover_slots
模組會增強 Azure 資料庫適用於 PostgreSQL 的彈性伺服器。 它可有效解決容錯移轉之後不會保留邏輯複寫位置的標準 PostgreSQL 引擎問題。 維護這些位置對於防止在主要伺服器角色變更期間複寫暫停或資料不符非常重要,確保作業持續性和資料完整性。
延伸模組可藉由管理複寫位置的必要傳輸、清除和同步處理,簡化容錯移轉程序,藉此在伺服器角色變更期間提供順暢的轉換。
您可以在其 GitHub 頁面上找到使用pg_failover_slots
模組的詳細資訊和指示。
若要使用 pg_failover_slots
模組,請確定伺服器啟動時 已載入其函式庫 。