Babelfish for PostgreSQL是一个Apache-2.0开源项目,该项目向PostgreSQL添加了与Microsoft SQL Server兼容的端点,以使PostgreSQL数据库能够理解SQL Server wire protocol和常用的SQL Server命令。使用Babelfish,为SQL Server构建的应用程序可以直接与PostgreSQL一起使用,几乎不需要更改代码,也无需更改数据库驱动程序。
T-SQL 即 Transact-SQL,是 SQL 在 Microsoft SQL Server 上的增强版,它是用来让应用程序与 SQL Server 沟通的主要语言。

1.下载源代码
mkdir $HOME/babelfish-for-postgresql
cd $HOME/babelfish-for-postgresql
git clone https://github.com/babelfish-for-postgresql/postgresql_modified_for_babelfish.git
git clone https://github.com/babelfish-for-postgresql/babelfish_extensions.git
2.安装基础软件包
Flex 2.6.4
Libxml2 development libraries
Open SSL development libraries
Readline development libraries
Zlib
OSSP uuid development libraries
pkg-config
ICU development libraries
Bison 3.0.5 or higher命令如下:
sudo yum install build-essential flex libxml2-dev bison libreadline-dev zlib1g-dev
sudo yum install uuid-dev pkg-config libossp-uuid-dev libssl-dev icu-devtools[appstream]
name=CentOS Linux $releasever - AppStream
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=AppStream&infra=$infra
baseurl=https://mirrors.aliyun.com/centos/8-stream/AppStream/x86_64/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial修改CentOS-Linux-BaseOS.repo,注释mirrorlist,把baseurl取消注释并修改为阿里云镜像地址,如下:
[baseos]
name=CentOS Linux $releasever - BaseOS
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=BaseOS&infra=$infra
baseurl=https://mirrors.aliyun.com/centos/8-stream/BaseOS/x86_64/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial 如果碰到安装报错问题二:一些开发包名称无法适配的问题,我们可以查找对应的开发包,也可以在这里一次性安装所有开发工具包组,命令如下:
#查看有哪些组安装包可用
yum grouplist | more
#搜索一下有哪些和 Development 有关
yum grouplist | grep Development
#安装Development Tools这个包
yum groupinstall -y "Development Tools"3.配置运行脚本
./configure CFLAGS="-ggdb" \
--prefix=/usr/local/pgsql \
--enable-debug \
--with-libxml \
--with-uuid=ossp \
--with-icu \
--with-extra-version=" Babelfish for PostgreSQL"如果configure执行遇到OSSP UUID问题,例如error:library ‘ossp-uuid‘ or ‘uuid‘ is required for OSSP UUID,那么解决方法如下:
解决方法1:sudo yum install uuid libuuid libuuid-devel
解决方法2:下载uuid的压缩包,然后解压 tar -xvzf xxx.tar.gz,之后进入目录./configure即可。
4.配置安装文件夹
#INSTALLATION_PATH=<the path you specified as prefix>
INSTALLATION_PATH=/usr/local/pgsql
mkdir "$INSTALLATION_PATH" 为避免安装错误,先更改安装目录的所有权,命令如下:
#sudo chown -R <your user>:<your group> "$INSTALLATION_PATH"
sudo chown -R guanhongchao:guanhongchao /usr/local/pgsql5.命令编译Babelfish
d $HOME/babelfish-for-postgresql/postgresql_modified_for_babelfish
make # Compiles the Babefish for PostgreSQL engine
cd contrib
make # Compiles the PostgreSQL default extensions
cd ..
make install # Installs the Babelfish for PostgreSQL engine
cd contrib
make install # Installs the PostgreSQL default extensions6.编译BABELFISH EXTENSIONS
1)设置编译环境变量
#源码编译后,pg_config存在的路径
export PG_CONFIG=/usr/local/pgsql/bin/pg_config
#postgresql_modified_for_babelfish源代码所在的路径
export PG_SRC=$HOME/babelfish-for-postgresql/postgresql_modified_for_babelfish
#cmake安装的路径
export cmake=/usr/local/cmake2)要编译Babelfish extensions,需要安装一些额外的工具:
Antlr 4.9.3 Runtime
Open Java 8
Unzip
pkgconf
libutfcpp development libraries
CMake对应工具安装命令如下:
# unzip libutfcpp-dev cmake curl安装
sudo yum install unzip libutfcpp-dev cmake curl
#Open Java 8 安装
sudo yum search jdk
sudo yum install java-1.8.0-openjdk
sudo yum install java-1.8.0-openjdk-devel
# Antlr4 4.9.3 Runtime 安装
# Dowloads the compressed Antlr4 Runtime sources on /opt/antlr4-cpp-runtime-4.9.3-source.zip
sudo curl https://www.antlr.org/download/antlr4-cpp-runtime-4.9.3-source.zip \
--output /opt/antlr4-cpp-runtime-4.9.3-source.zip
# Uncompress the source into /opt/antlr4
sudo unzip -d /opt/antlr4 /opt/antlr4-cpp-runtime-4.9.3-source.zip
sudo mkdir /opt/antlr4/build
cd /opt/antlr4/build
#EXTENSIONS_SOURCE_CODE_PATH="<the patch in which you downloaded the Babelfish extensions source code>"
EXTENSIONS_SOURCE_CODE_PATH=$HOME/babelfish-for-postgresql/babelfish_extensions
# Generates the make files for the build
sudo cmake .. -DANTLR_JAR_LOCATION="$EXTENSIONS_SOURCE_CODE_PATH/contrib/babelfishpg_tsql/antlr/thirdparty/antlr/antlr-4.9.3-complete.jar" \
-DCMAKE_INSTALL_PREFIX=/usr/local -DWITH_DEMO=True
# Compile and install
sudo make
sudo make install
sudo cp /usr/local/lib/libantlr4-runtime.so.4.9.3 "$INSTALLATION_PATH/lib"3)编译Babelfish extensions 源码并安装插件,命令如下:
#进入Babelfish extension 源码安装目录
cd $EXTENSIONS_SOURCE_CODE_PATH
# Install babelfishpg_money extension
cd 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了。
7.其他安装步骤
sudo mkdir -p /usr/local/pgsql/data如果PostgreSQL所有者具有root权限,PostgreSQL将不会启动,所以我们创建名为postgres 的用户/所有者,该用户/所有者没有root权限:
sudo adduser postgres将Babelfish库和data目录的所有权更改为新用户(postgres)。
sudo chown -R postgres:postgres $INSTALLATION_PATH
sudo chown -R postgres:postgres /usr/local/pgsql/data然后,使用sudo和postgres 用户初始化数据库目录:
sudo su postgres
$INSTALLATION_PATH/bin/initdb -D /usr/local/pgsql/data初始化data目录后,修改postgresql.conf。通过取消注释以下属性和设置值来配置文件:
listen_addresses = '*'
shared_preload_libraries = 'babelfishpg_tds'然后,您可以使用以下命令启动Babelfish:
$INSTALLATION_PATH/bin/pg_ctl -D /usr/local/pgsql/data start启动成功后,在使用Babelfish之前,接下来您需要选择迁移模式并创建一个Babelfish群集。
8.Babelfish extensions设置迁移模式和初始化
创建Babelfish群集时,可以选择使用单个迁移的T-SQL用户数据库,也可以同时使用多个迁移的T-SQL用户数据库。如果指定single db,则只能在Babelfish中创建一个T-SQL数据库,T-SQL模式将在Babelfish数据库中创建常规PostgreSQL模式。如果指定multi-db,则可以创建多个T-SQL数据库(每个数据库都有自己的模式),并且T-SQL模式将被创建为PostgreSQL模式(<database name>_<schema_name>),以避免名称冲突。
迁移模式存储在migration_mode参数中,初始化Babelfish后,则无法更改此参数的值。如果要更改migration_mode,则需要创建一个新群集。如果不选择migration_mode,Babelfish将使用默认值single_db初始化。
设置迁移模式和初始化Babelfish extensions之前创建一个用户和数据库。启动psql后,在PostgreSQL端口上调用(默认情况下为5432),启动psql命令如下:
$INSTALLATION_PATH/bin/psql在psql模式下,Babelfish extensions设置迁移模式和初始化,命令如下:
/* Create a user that will own the sample database */
CREATE USER babelfish_user WITH CREATEDB
#CREATEROLE PASSWORD '<PUT_SECRET_PASSWORD_HERE>' INHERIT;
CREATEROLE PASSWORD '12345678' INHERIT;
/* Create a database named demo, owned by the above user */
CREATE DATABASE demo OWNER babelfish_user;
ALTER SYSTEM SET babelfishpg_tsql.database_name = 'demo';
SELECT pg_reload_conf();
/* Specify the migration mode for the database */
ALTER DATABASE demo SET babelfishpg_tsql.migration_mode = 'multi-db';
/* Move into the demo database */
\c demo
/* Create the extension in the demo database and initialize Babelfish */
CREATE EXTENSION IF NOT EXISTS "babelfishpg_tds" CASCADE;
CALL SYS.INITIALIZE_BABELFISH('babelfish_user');9.配置允许远程连接
# IPv4 local connections:
host all all 127.0.0.1/32 TRUST
host all all 10.16.6.9/32 TRUST10.windows 安装SQL Server远程客户端


以上结果表示ssms客户端采用TSQL访问babel for postgresql数据库群集系统成功,也表示Babelfish for PostgreSQL在centos8下的安装已经到此完成。




