從源代碼編譯 BabelFish

環境

操作系統:Ubuntu Kylin 優麒麟 21.10、Debian 11 Bullseye

適用架構:ARM64(鯤鵬、飛騰)

 

簡介

2021年 10月 28日,AWS 正式宣佈開源 Babelfish for PostgreSQL 項目,此項目基於寬鬆的 Apache 2.0 和 PostgreSQL 許可證 。從項目的內容看,它的目標是微軟的 SQL Server。

官方網站,https://babelfishpg.org/

Babelfish 是針對 PostgreSQL 的功能增強,它包含兩方面的內容:一些 PostgreSQL 的優化補丁和 SQL Server 的擴展功能:

T-SQL:Babelfish 支持 SQL Server 專用的 T-SQL 語言,包括 PostgreSQL 不支持的變量、異常、控制流等結構。Babelfish 還支持 T-SQL 語義。例如,在某些情況下,錯誤會在傳統 PostgreSQL 中創建回滾,但在 SQL Server 中不會。

TDS :TDS 是 SQL Server 的有線協議,默認在端口 1433 上運行,Babelfish 使用相同的網絡協議、端口和驅動程序。

查詢語句:Babelfish 提供 SQL Server 特有的數據類型、函數和運算符,因此 PostgreSQL 可以直接本地執行 SQL Server 方言。

Babelfish Compass :這個評估工具能評估 SQL Server 的 SQL/DDL 代碼對 Babelfish 的支持級別。它會列出被評估的 SQL/DDL 代碼中所有的 SQL 功能,還會告訴你最新版本的 Babelfish 是否支持這些功能。

語句、端口、驅動...,Babelfish 的這些擴展讓 PostgreSQL 能理解並執行來自爲 SQL Server 構建的應用程序的查詢指令,也意味着 SQL Server 用戶可以輕鬆地將數據庫遷移到 PostgreSQL 。

Babelfish 開源的意圖非常明顯:讓更多微軟 SQL Server 用戶選擇 AWS 的 PostgreSQL ,而市場會作出何種反應呢?讓我們拭目以待。

https://babelfishpg.org/docs/installation/compiling-babelfish-from-source/

如果你想自己編譯Babelfish,你需要遵循幾個步驟來產生一個工作的二進制文件。在本節中,我們將描述這在Linux(以及一般的UNIX風格的系統)上是如何工作的。

獲取源代碼

首先要做的是實際下載你想要構建的源代碼。Babelfish被分成兩個存儲庫,第一個存儲庫包含PostgreSQL數據庫引擎,通過一些更改,可以將Babelfish工作所需的協議、語言解析器和更多功能連接到PostgreSQL中。第二個包含支持T-SQL協議、T-SQL語言、TDS協議等的擴展。 PostgreSQL引擎的Babelfish源代碼可以從這裏下載。 巴貝斯菲什擴展源代碼可以從這裏下載。 如果您已經安裝了git,那麼您可以使用以下命令來克隆回購:

git clone https://github . com/babelfish-for-PostgreSQL/PostgreSQL _ modified _ for _ babelfish . git

git clone https://github . com/babel fish-for-PostgreSQL/babel fish _ extensions . git

準備您的系統

要編譯Babelfish,您必須確保您的系統上有各種軟件組件可用。這些包應該是每一個現代Linux發行版的一部分,使用相似但不完全相同的名稱。 還要記住,您將需要一個具有root權限的用戶,這樣您就能夠使用 sudo 運行命令 如果您想運行的不僅僅是Babelfish的裸版本,我們建議在上面列出的硬要求之上安裝以下附加包。

 如果您碰巧使用了Debian或Ubuntu,您可能希望使用以下命令來安裝依賴項:

sudo apt install-y build-essential flex libxml 2-dev bison libreadline-dev zlib1g-dev

sudo apt install-y uuid-dev pkg-config libossp-uuid-dev libssl-dev ICU-dev tools

編譯代碼

在爲 PostgreSQL 源代碼編譯 Babelfish 之前,我們需要配置構建。爲此,我們需要在您下載 PostgreSQL 引擎源的 Babelfish 目錄中運行配置腳本:

./configure CFLAGS="-ggdb" \
  --enable-debug \
  --with-libxml \
  --with-uuid=ossp \
  --with-icu \
  --with-extra-version=" Babelfish for PostgreSQL"

上面將在/usr/local/pgsql下配置安裝路徑;如果要更改安裝目錄,可以使用前綴標誌。因此,如果您想將路徑更改爲/usr/local/pgsql-13.4,可以按如下方式運行配置腳本。

./configure CFLAGS="-ggdb" \
  --prefix=/usr/local/pgsql-13.4 \
  --enable-debug \
  --with-libxml \
  --with-uuid=ossp \
  --with-icu \
  --with-extra-version=" Babelfish for PostgreSQL"

 爲PostgreSQL引擎構建巴別魚 現在我們已經配置了源樹,配置安裝文件夾很重要。

INSTALLATION_PATH=<the path you specified as prefix>
mkdir "$INSTALLATION_PATH"

爲了避免安裝錯誤,您應該擁有安裝目錄。您可以使用以下命令更改安裝路徑的所有權:

sudo chown -R <your user>:<your group> "$INSTALLATION_PATH"

 例如,如果您的安裝路徑是/usr/local/pgsql-13.4,並且您的用戶是johndoe,則命令應該如下:

sudo chown -R johndoe:johndoe /usr/local/pgsql-13.4

現在,我們可以使用以下命令構建巴別魚:

make #爲PostgreSQL引擎編譯巴別魚cd contrib

make #編譯PostgreSQL默認擴展光盤..

make install #爲PostgreSQL引擎安裝Babelfish CD contrib

make install #安裝PostgreSQL默認擴展

#### Building Babelfish Extensions

In order to build the extensions we would need to install some additional tools:

##### Additional requied tools
- [Antlr 4.9.2 Runtime](https://www.antlr.org/)
- [Open Java 8](https://openjdk.java.net/)
- Unzip
- [pkgconf](http://pkgconf.org/)
- libutfcpp development libraries
- [CMake](https://cmake.org/)

You can install most of these tools by running the command:

``` sh
sudo apt install -y openjdk-8-jre unzip libutfcpp-dev cmake curl

安裝Antlr4運行時 對於Antlr4 4.9.2運行時,Ubuntu Focal中沒有可用的C++二進制文件,因此有必要從源代碼編譯它。低於4.9的版本尚未經過全面測試。 要安裝Antlr4運行時,我們需要有Antlr4 .jar. Babelfish擴展源代碼包括這一點。路徑中的jar/contrib/babelfishpg _ tsql/antlr/third party/antlr。 記住這一點,我們可以通過運行以下命令來安裝Antlr4運行時: # Dowloads在/opt/antlr 4-CPP-Runtime-4 . 9 . 2-source . zip上加載壓縮的Antlr4 Runtime源

sudo curl https://www . antlr . org/download/antlr 4-CPP-runtime-4 . 9 . 2-source . zip \ -output/opt/antlr 4-CPP-runtime-4 . 9 . 2-source . zip #將源解壓縮到/opt/antlr4中 sudo unzip-d/opt/antlr 4/opt/antlr 4-CPP-runtime-4 . 9 . 2-source . zip sudo mkdir /opt/antlr4/build cd /opt/antlr4/build EXTENSIONS_SOURCE_CODE_PATH= " <您下載巴貝斯菲什擴展源代碼的補丁>" #爲構建生成製作文件 sudo cmake..-DANTLR _ JAR _ LOCATION = $ EXTENSIONS _ SOURce _ CODE _ PATH/contrib/babelfishpg _ tsql/antlr/third party/antlr/antlr-4 . 9 . 2-complete . JAR " \ -DCMAKE _ INSTALL _ PREFIX =/usr/local-DWITH _ DEMO = True #編譯並安裝 sudo make sudo進行安裝 現在我們已經安裝了antlr4運行時,我們需要將libantlr4-runtime.so.4.9.2庫複製到已安裝的Babelfish for PostgreSQL引擎libs文件夾中。我們可以通過運行以下命令來做到這一點: sudo CP/usr/local/lib/libantlr 4-runtime . so . 4 . 9 . 2 " $ INSTATION _ PATH/lib " 構建和安裝擴展 現在我們已經安裝了構建Babelfish擴展的所有工具,我們需要配置一些環境變量: PG_CONFIG:應該指向用於PostgreSQL引擎安裝的Babelfish中pg_config文件的位置,在我們的例子中是:$ INSTATION _ PATH/bin/PG _ CONFIG。 PG_SRC:應該指向PostgreSQL引擎源文件夾的Babelfish的位置。 cmake:應該包含cmake二進制文件的路徑 假設您已經在/usr/local/pgsql-13.4/中安裝了PostgreSQL引擎的Babelfish,您已經在~/PostgreSQL _ modified _ for _ Babelfish中下載了PostgreSQL引擎的Babelfish源代碼,並且在/usr/local/bin/cmake中安裝了cmake,設置的環境變量如下: 導出PG _ CONFIG =/usr/local/pgsql-13.4/bin/PG _ CONFIG 導出PG _ SRC = $ HOME/PostgreSQL _ modified _ for _ babel fish 導出cmake=/usr/local/bin/cmake 現在我們都準備好構建擴展了。爲此,我們需要轉到Babelfish擴展源代碼中的contrib文件夾,然後逐個構建擴展。我們使用以下腳本進行操作: #安裝babelfishpg_money擴展 cd contrib/babelfishpg_money 製造 製作安裝 #安裝babelfishpg_common擴展 激光唱片../babelfishpg_common 製造 製作安裝 #安裝babelfishpg_tds擴展 激光唱片../babelfishpg_tds 製造 製作安裝 #安裝babelfishpg_tsql擴展 激光唱片../babelfishpg_tsql 製造 製作安裝 編譯完所有擴展後,您可以手動啓動PostgreSQL。 進一步的安裝步驟 在啓動Babelfish之前,我們需要在安裝文件夾中做一些更改。這是因爲,如果PostgreSQL的所有者擁有根訪問權限,它就不會啓動。另外,我們需要爲PostgreSQL創建一個目錄來存儲它的數據。 讓我們首先創建數據目錄,在這個例子中我們將使用/usr/local/pgsql/data作爲數據文件夾。 sudo mkdir-p/usr/local/pgsql/data 現在,讓我們創建一個postgres用戶 sudo adduser postgres 通過創建的用戶,我們可以更改Babelfish二進制文件的所有權和數據目錄。 sudo chown-R postgres:postgres $ INSTATION _ PATH sudo chown-R postgres:postgres/usr/local/pgsql/data 現在我們可以使用創建的postgres用戶來初始化數據庫目錄。 sudo su postgres $ INSTATION _ PATH/bin/initdb-D/usr/local/pgsql/data 數據目錄初始化後,我們需要通過取消註釋和設置以下屬性來更改postgresql.conf文件: listen _ addresses = ' * ' shared _ preload _ libraries = ' babelfishpg _ TDS ' 現在,您可以通過運行以下命令來啓動Babelfish: $ INSTATION _ PATH/bin/pg _ CTL-D/usr/local/pgsql/數據開始

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章