
Babelfish for PostgreSQL開源已快一月,不過全網還沒有實踐者總結,今天我們就測驗看看,Babelfish到底是如何部署與使用的!
Babelfish for PostgreSQL介紹
我們先回顧Babelfish for PostgreSQL的基本架構,如下圖:

Babelfish是一種擴展,它的存盤庫是PostgreSQL,Babelfish支持T-SQL協議、T-SQL語言、TDS協議等,這就使我們可以使用T-SQL語法對PostgreSQL資料庫進行操作,而這個插件的最強優勢就是,以最大兼容性/最小更改去遷移MSSQL到PostgreSQL,當然,你也用在 MSSQL中操作PostgreSQL資料庫,功能類似MSSQL的鏈接服務器或PolyBase,
Babelfish支持TDS協議版本7.1及更高版本,即支持Microsoft SQL Server 2000及以上版本,支持的PostgreSQL版本為PostgreSQL 13及以上版本,Babelfish作為PostgreSQL的一部分運行,默認情況下,資料庫服務器將在埠5432上偵聽PostgreSQL,在默認情況下在埠1433上偵聽TDS,接下來,你就可以使用sqlcmd通過1433連接至TDS埠,
部署Babelfish for PostgreSQL
為了部署Babelfish,我專門下載了Ubuntu 21.10并使用虛擬機安裝了該系統,
筆者也曾使用CentOS 7編譯安裝,但是Babelfish似憾訓不兼容,編譯了一周也沒完成,否則當前文章該提早兩周面世,
跟著一步步來,即可實作Babelfish的使用,這比官網更詳細一些,
安裝相關依賴,我們需要一個具有root權限的用戶,可以sudo切換,
apt-get update apt-get install -y build-essential flex libxml2-dev bison libreadline-dev zlib1g-dev libxslt-dev apt-get install -y uuid-dev pkg-config libossp-uuid-dev libssl-dev icu-devtools gettext apt-get install -y openjdk-8-jre unzip libutfcpp-dev curl openssl python-dev libpq-dev pkgconf
下載存盤庫,我們需要Babelfish for PostgreSQL引擎原始碼及Babelfish擴展包原始碼,
git clone https://github.com/babelfish-for-postgresql/postgresql_modified_for_babelfish.git git clone https://github.com/babelfish-for-postgresql/babelfish_extensions.git mv babelfish_extensions /opt/babelfish_extensions mv postgresql_modified_for_babelfish /opt/postgresql_modified_for_babelfish
接下來,我們就開始編譯安裝吧,
#創建安裝目錄 INSTALLATION_PATH=/usr/local/pgsql mkdir "$INSTALLATION_PATH" #構建配置 cd /opt/postgresql_modified_for_babelfish ./configure CFLAGS="-ggdb" \ --prefix=${INSTALLATION_PATH} \ --enable-debug \ --with-libxml \ --with-uuid=ossp \ --with-icu \ --with-extra-version="Babelfish for PostgreSQL" #編譯安裝 cd /opt/postgresql_modified_for_babelfish make # Compiles the Babefish PostgreSQL engine cd contrib make # Compiles the PostgreSQL default extensions cd .. make install # Installs the Babelfish PostgreSQL engine cd contrib make install # Installs the PostgreSQL default extensions
對于Antlr4 4.9.2 Runtime,Ubuntu中沒有可用的C++二進制檔案,因此有必要從源代碼編譯它,4.9以下的版本官方尚未完全測驗,要安裝Antlr4 Runtime,我們需要有Antlr4 .jar,
Babelfish擴展源代碼在路徑中包含這個
.jar(/contrib/babelfishpg_tsql/antlr/thirdparty/antlr)
現在我們安裝cmake和Antlr4:
#安裝 cmake curl -L https://github.com/Kitware/CMake/releases/download/v3.20.6/cmake-3.20.6-linux-x86_64.sh --output ~/cmake-3.20.6-linux-x86_64.sh chmod +x ~/cmake-3.20.6-linux-x86_64.sh ~/cmake-3.20.6-linux-x86_64.sh --prefix=/usr/local --skip-license cp /usr/local/bin/cmake /usr/bin/ #安裝 Antlr4 curl https://www.antlr.org/download/antlr4-cpp-runtime-4.9.2-source.zip --output ~/antlr4-cpp-runtime-4.9.2-source.zip unzip -d /opt/antlr4 ~/antlr4-cpp-runtime-4.9.2-source.zip mkdir /opt/antlr4/build cd /opt/antlr4/build EXTENSIONS_SOURCE_CODE_PATH="/opt/babelfish_extensions" cmake .. -DANTLR_JAR_LOCATION="$EXTENSIONS_SOURCE_CODE_PATH/contrib/babelfishpg_tsql/antlr/thirdparty/antlr/antlr-4.9.2-complete.jar" \ -DCMAKE_INSTALL_PREFIX=/usr/local -DWITH_DEMO=True make make install cp /usr/local/lib/libantlr4-runtime.so.4.9.2 "$INSTALLATION_PATH/lib"
編譯Antlr4時可能存在一個bug,因為檔案gtest-death-test.cc中的變數dummy未賦值,make將報錯并終止,你可以給該變數賦值,
構建和安裝Babelfish擴展
我們已經安裝了Babelfish for PostgreSQL引擎,還需要設定幾個環境變數,接下來才繼續構建擴展,
-
PG_CONFIG:指向在Babelfish平臺PostgreSQL的引擎安裝pg_config檔案的位置,
-
PG_SRC:指向Babelfish for PostgreSQL引擎源檔案夾的位置,
-
cmake:指向包含cmake二進制檔案的路徑
export PG_CONFIG=$INSTALLATION_PATH/bin/pg_config export PG_SRC=/opt/postgresql_modified_for_babelfish export cmake=/usr/local/bin/cmake
編譯擴展:
# Install babelfishpg_money extension cd /opt/babelfish_extensions/contrib/babelfishpg_money make make install # Install babelfishpg_common extension cd ../babelfishpg_common make make install # Install babelfishpg_tds extension cd ../babelfishpg_tds make make install # Installs the babelfishpg_tsql extension cd ../babelfishpg_tsql make make install
初始化及配置PostgreSQL
以上Babelfish引擎及Babelfish擴展部署完成后,現在我們就該初始化PostgreSQL資料庫實體了,在啟動Babelfish之前,我們需要在安裝檔案夾中做一些更改,這是因為如果所有者具有root訪問權限,PostgreSQL將不會啟動,此外,我們需要為PostgreSQL創建一個目錄和用戶,
#創建獨立用戶 postgres mkdir -p $INSTALLATION_PATH/data adduser --disabled-password --gecos "" postgres chown -R postgres:postgres $INSTALLATION_PATH # 初始化資料并配置 su postgres INSTALLATION_PATH=/usr/local/pgsql $INSTALLATION_PATH/bin/initdb -D $INSTALLATION_PATH/data vim $INSTALLATION_PATH/data/postgresql.conf listen_addresses = '*' port = 5432 shared_preload_libraries = 'babelfishpg_tds' vim $INSTALLATION_PATH/data/pg_hba.conf host all all 0.0.0.0/0 md5 #啟動 PostgreSQL $INSTALLATION_PATH/bin/pg_ctl -D $INSTALLATION_PATH/data start
連接Babelfish操作
都部署完成后,我們現在可以連接Babelfish了,在Linux環境下,可以使用psql、tsql、sqlcmd這三個客戶端工具連接,當然,你也可以在Windows環境使用SQL Server Management Studio(SSMS)來連接,
Ubuntu安裝3個客戶端工具:
apt-get install -y postgresql-client apt-get install -y freetds-bin lsb_release -a curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add - curl https://packages.microsoft.com/config/ubuntu/21.04/prod.list | sudo tee /etc/apt/sources.list.d/msprod.list apt-get update apt-get install -y mssql-tools unixodbc-dev echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc source ~/.bashrc
現在,我們先使用psql通過5432埠連接至PostgreSQL,同時創建一個用戶來進行測驗,
其中migration_mode有2種模式,在single-db的情況下,MS SQL資料庫被映射到PostgreSQL中的模式,在multi-db情況下,可使用多個資料庫,
#使用psql連接Babelfish并創建用戶jeeson和資料庫demo psql -h 127.0.0.1 -p 5432 -d postgres -U postgres SELECT version(); create user jeeson superuser password 'YourNewStrong@Passw0rd'; create database demo owner jeeson; \c demo create extension if not exists "babelfishpg_tds" cascade; alter system set babelfishpg_tsql.database_name = 'demo'; alter database demo set babelfishpg_tsql.migration_mode = 'multi-db'; select pg_reload_conf(); call sys.initialize_babelfish('jeeson'); #使用tsql或sqlcmd連接至Babelfish tsql -S 127.0.0.1 -p 1433 -U jeeson -P "YourNewStrong@Passw0rd" sqlcmd -S 127.0.0.1,1433 -U jeeson -P "YourNewStrong@Passw0rd"
我們創建了一個資料庫demo,以及一個用戶jeeson,現在,我們使用tsql和sqlcmd通過1433埠連接到Babelfish看看,

是不是很神奇?不要以為僅僅是連接到PostgreSQL,它可是用SQL Server的T-SQL語法進行操作的,當你要把SQL Server資料庫遷移到PostgreSQL時,只需把SQLServer的生成的SQL腳本執行即可,
對于習慣使用SQL Server Management Studio的同學,也可以在Windows中直接連接哦,不過需要注意的是,不是通過資源管理器連接服務器,而是只打開一個新查詢視窗進行連接!

對于用戶來說,Babelfish兼容PostgreSQL語法,而對SQL Server來看,就像一個閹割版的云產品一樣,
其實,對于非運維人員,常用的T-SQL已經足夠適用,
Babelfish有一個名為Babelfish Compass的評估工具,可幫助人們驗證SQLServer的遷移,
只需在DDL上運行 Compass工具,它能確認Babelfish對T-SQL代碼的支持程度、識別在執行Babelfish之前可能需要更改的T-SQL代碼,
本文來自博客園,作者:古道輕風,轉載請注明原文鏈接:https://www.cnblogs.com/88223100/p/Babelfish-for-PostgreSQL.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/536059.html
標籤:PostgreSQL
上一篇:MYSQL5.7 保姆級安裝教程
