當您希望在單一的資料庫執行個體中同時使用SQL Server和PostgreSQL能力,或計劃將現有應用從SQL Server遷移到更具成本效益的PostgreSQL時,Babelfish for RDS PostgreSQL實現了對T-SQL語句和TDS協議的支援。本文從產品特性、架構、適用情境以及使用方法等維度介紹Babelfish for RDS PostgreSQL執行個體,協助您快速瞭解並上手使用。
Babelfish是什麼
基於Babelfish for PostgreSQL的開源專案,阿里雲RDS PostgreSQL執行個體購買時開啟Babelfish選項後,可以同時獲得Microsoft SQL Server和PostgreSQL兩種資料庫引擎資料查詢和處理的能力,從而使RDS PostgreSQL具備解析執行SQL Server T-SQL語句的能力。
Babelfish支援SQL Server Tabular Data Stream (TDS) wire protocol和T-SQL(Microsoft SQL Server 查詢語言),因此您無需切換資料庫驅動程式或重新編寫SQL,只需要在適配少量代碼的情況下,將應用程式的資料庫從SQL Server遷移至開啟了Babelfish的阿里雲RDS PostgreSQL執行個體上。
支援的T-SQL內建函數請參見Babelfish支援的T-SQL內建函數。
適用情境
如果您期望節省SQL Server的License費用支出。
如果您計劃將SQL Server資料庫切換為PostgreSQL,又不希望投入大量的時間和精力重寫應用程式。
如果您期望使用PostgreSQL強大的開源外掛程式庫能力,例如時空錨定外掛程式PostGIS,時序外掛程式TimescaleDB等。
如果您期望一份成本享受兩種資料庫引擎的資料處理能力。
Babelfish for RDS PostgreSQL架構圖
架構說明:
Babelfish for RDS PostgreSQL執行個體具備兩個TCP連接埠,分別監聽來自SQL Server和PostgreSQL用戶端的SQL請求。
TDS Listener:接收SQL Server協議連接埠(TDS)的SQL請求,預設連接埠號碼為1433。
說明Babelfish支援TDS協議7.1及更高版本,即支援Microsoft SQL Server 2000及以上版本。
PostgreSQL Listener:接收PostgreSQL協議連接埠的SQL請求,預設連接埠號碼為5432。
說明當前支援RDS PostgreSQL 15。
Babelfish for RDS PostgreSQL執行個體接收來自TDS Listener連接埠的SQL請求時,該請求被轉寄到T-SQL解析器,將SQL Server的T-SQL轉換為PostgreSQL可識別的執行計畫。
Babelfish for RDS PostgreSQL執行個體接收來自PostgreSQL Listener連接埠的SQL請求時,該請求被轉寄到PostgreSQL解析器,產生執行計畫。
PostgreSQL內部的SQL執行器統一處理,執行所有計劃。
開啟了Babelfish功能的RDS PostgreSQL執行個體,使您同時具備了兩個資料庫引擎(PostgreSQL和SQL Server)的能力,既可以處理來自SQL Server的請求,又可以處理來自PostgreSQL的請求,在降低成本的同時獲得更多的能力支援。
移轉模式簡介
Babelfish for RDS PostgreSQL執行個體會預置一個名為babelfish_db
的PostgreSQL資料庫,所有遷移的SQL Server對象和結構都會放置在該資料庫下。
如果您通過TDS連接埠串連執行個體,babelfish_db
資料庫不可見。
您可以選擇Single-DB模式(單資料庫模式)或Multi-DB模式(多資料庫模式)。不同模式下,babelfish_db
內的SQL Server資料庫模式及名稱不同。
Single-DB模式
架構圖:
說明:該模式下,babelfish_db資料庫中使用者資料庫的Schema名稱與SQL Server中的相同。
例如:通過TDS連接埠建立資料庫DB_A,然後在DB_A下建立schema_A。
在PostgreSQL的babelfish_db資料庫中,Schema名稱為:dbo和schema_A。
在SQL Server的DB_A資料庫中,Schema名稱為:dbo和schema_A。
Multi-DB模式
架構圖:
說明:該模式下,在PostgreSQL中,使用者資料庫的schema名稱為
dbname_schemaname
。在SQL Server中,Schema名稱保持不變。例如:通過TDS連接埠建立資料庫DB_A,然後在DB_A下建立schema_A。
在PostgreSQL的babelfish_db資料庫中,Schema名稱為:DB_A_dbo和DB_A_schema_A。
在SQL Server的DB_A資料庫中,Schema名稱為:dbo和schema_A。
計費
Babelfish for RDS PostgreSQL執行個體與通用RDS PostgreSQL執行個體售價相同,不會收取任何額外費用,價格與所選地區、規格、儲存等配置相關,請前往購買頁面查看。
注意事項
當前僅支援在購買執行個體時開通Babelfish,且執行個體需滿足以下條件:
說明暫不支援叢集系列執行個體。
執行個體大版本:RDS PostgreSQL 15。
執行個體產品類型為標準版。
已購買的RDS PostgreSQL執行個體,暫不支援開通Babelfish。
開通Babelfish後,暫不支援關閉。
執行個體建立成功後,將會初始化建立babelfish_db資料庫,該資料庫為Babelfish執行個體的關鍵資料庫,請勿刪除,否則執行個體將不可用。