Babelfish for RDS PostgreSQL
當您希望在單一的數據庫實例中同時使用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實例的關鍵數據庫,請勿刪除,否則實例將不可用。