
Babelfish是在PostgreSQL的基礎之上實作了類似Microsoft SQL Server部分功能,為了實作這個目標,PostgreSQL核心內部的幾個部分必須被修改,PostgreSQL 沒有提供這種開箱即用的功能,因此必須提供附加組件才能實作這一點,
Babelfish實作Microsoft SQL Server功能的方式是使用hooks(我們一般稱之為鉤子),主要做這意味著 PostgreSQL可以呈現為不同的資料庫狀態,比如Oracle、MS SQL SERVER,而事實上在同一時間可以同時支持多個協議,會使資料庫的設定更加靈活和易于處理,
Babelfish for PostgreSQL架構圖
架構說明:
- Babelfish for 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 13和14,
- Babelfish for PostgreSQL實體接收來自TDS Listener埠的SQL請求時,該請求被轉發到T-SQL決議器,將SQL Server的T-SQL轉換為PostgreSQL可識別的執行計劃,
- Babelfish for PostgreSQL實體接收來自PostgreSQL Listener埠的SQL請求時,該請求被轉發到PostgreSQL決議器,生成執行計劃,
- PostgreSQL內部的SQL執行器統一處理,執行所有計劃,
開啟了Babelfish功能的PostgreSQL實體,使您同時具備了兩個資料庫引擎(PostgreSQL和SQL Server)的能力,既可以處理來自SQL Server的請求,又可以處理來自PostgreSQL的請求,在降低成本的同時獲得更多的能力支持,
遷移模式簡介
Babelfish for RDS PostgreSQL實體會預置一個名為babelfish_db的PostgreSQL資料庫,所有遷移的SQL Server物件和結構都會放置在該資料庫下,
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模仿 Microsoft SQL Server的特定資料型別,以下是這些型別的完整串列:
sys.BBF_BINARY: 二進制資料的資料型別,
sys.BIT: 將1或0轉換為t或f,
sys.BPCHAR和sys.VARCHAR:Microsoft SQL Server特定varchar實作
sys.DATETIME: 時間和日期的簡單資料型別,為了更精確地使用DATETIME2,
sys.DATETIME2:DATETIME具有更高精度和功能的擴展,
sys.DATETIMEOFFSET:很像DATETIME2,但具有時區概念,
sys.SMALLDATETIME:定義與一天中的時間相結合的日期,時間基于24小時制,秒數始終為零 (:00),沒有小數秒,
sys.SQL_VARIANT:使這些資料庫物件能夠支持其他資料型別,
sys.UNIQUEIDENTIFIER:16位元組GUID(例如6F9619FF-8B86-D011-B42D-00C04FC964FF)
lbabelfishpg_money: 固定精度數字型別
還有一種資料型別出于許可原因打包到單獨的擴展中:fixeddecimal.
lbabelfishpg_tds: TDS 協議擴展
此擴展處理TDS客戶端-服務器協議,它必須在服務器啟動時使用加載shared_preload_libraries,以便它可以開始在TDS埠上偵聽傳入連接,
lbabelfishpg_tsql: T-SQL 擴展
此擴展的目的是提供T-SQL處理所需的所有代碼,如果沒有可能無法撰寫存盤程序代碼,包含實作 Microsoft SQL Server 功能所需的大量函式、系統視圖和其他基礎結構,
Compass作為Babelfish的遷移評估工具,可以對源端的多個SQL腳本進行遷移評估,并給出評估報告;
WebSite是檔案相關內容,與官網是一致的,包括介紹Babelfish的架構、兼容性、安全等等;
Tools主要是可以訪問Babelfish的客戶端工具,包括psql、tsql以及MS SQL SERVER自帶的smss;
最后一部分是Client,這部分主要是客戶端編程,除了支持不同編程語言,如C、C#、Python、Java以外,還支持不同的驅動,如下:
lOLEDB Provider/MSOLEDBSQL
lOLEDB Driver/SQLOLEDB (deprecated by Microsoft)
l.NET Data Provider for SQL Server
l SQL Server Native Client 11.0 (deprecated by Microsoft)
l Microsoft SqlClient Data Provider for SQL Server
l Open Database Connectivity (ODBC)
l Java Database Connectivity (JDBC)
也就是說我們可以像使用MS SQL SERVER一樣來使用Babelfish,當時具體兼容性會有很多差異,
開源
PostgreSQL SQL Server 兼容插件 babelfish開源
AWS babelfish 開源了, 瞄準了SQL Server的存量資料庫市場.
https://github.com/babelfish-for-postgresql/
https://babelfishpg.org/getstarted/
但是目前的使用方法比較復雜, PG內核還沒有接收proxy protocol的patch, 所以要用babelfish必須使用aws開源的這個postgresql版本:
https://github.com/babelfish-for-postgresql/postgresql_modified_for_babelfish
《PostgreSQL devel preview - PROXY protocol support (支持代理協議解包, 源頭client ip filter pg_hba.conf, 例如haproxy, balancer)》
《PostgreSQL 兼容 SQL Server - Babelfish - SQL Server 業務 無感使用PostgreSQL - 一份資料, 同時兼容SQL Server和PostgreSQL》
本文來自博客園,作者:古道輕風,轉載請注明原文鏈接:https://www.cnblogs.com/88223100/p/About_Babelfish.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/535256.html
標籤:PostgreSQL
上一篇:MongoDB - 增刪改查
