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 沟通的主要语言。
Babelfish for PostgreSQL的工作原理

1.下载源代码
mkdir $HOME/babelfish-for-postgresqlcd $HOME/babelfish-for-postgresqlgit clone https://github.com/babelfish-for-postgresql/postgresql_modified_for_babelfish.gitgit clone https://github.com/babelfish-for-postgresql/babelfish_extensions.git
2.安装基础软件包
Flex 2.6.4Libxml2 development librariesOpen SSL development librariesReadline development librariesZlibOSSP uuid development librariespkg-configICU development librariesBison 3.0.5 or higher
sudo yum install build-essential flex libxml2-dev bison libreadline-dev zlib1g-devsudo yum install uuid-dev pkg-config libossp-uuid-dev libssl-dev icu-devtools
进入/etc/yum.repos.d/目录下
当前目录下创建bak文件夹目录,并备份全部当前的repo后缀文件到bak目录中 ,以备恢复使用。
修改CentOS-Linux-AppStream.repo,注释mirrorlist,把baseurl取消注释并修改为阿里云镜像地址,如下:
[appstream]name=CentOS Linux $releasever - AppStream#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=AppStream&infra=$infrabaseurl=https://mirrors.aliyun.com/centos/8-stream/AppStream/x86_64/os/gpgcheck=1enabled=1gpgkey=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=$infrabaseurl=https://mirrors.aliyun.com/centos/8-stream/BaseOS/x86_64/os/gpgcheck=1enabled=1gpgkey=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"
解决方法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/pgsqlmkdir "$INSTALLATION_PATH"
#sudo chown -R <your user>:<your group> "$INSTALLATION_PATH"sudo chown -R guanhongchao:guanhongchao /usr/local/pgsql
5.命令编译Babelfish
cd $HOME/babelfish-for-postgresql/postgresql_modified_for_babelfishmake # Compiles the Babefish for PostgreSQL enginecd contribmake # Compiles the PostgreSQL default extensionscd ..make install # Installs the Babelfish for PostgreSQL enginecd contribmake install # Installs the PostgreSQL default extensions
6.编译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/cmake
2)要编译Babelfish extensions,需要安装一些额外的工具:
Antlr 4.9.3 RuntimeOpen Java 8Unzippkgconflibutfcpp development librariesCMake
对应工具安装命令如下:
# unzip libutfcpp-dev cmake curl安装sudo yum install unzip libutfcpp-dev cmake curl#Open Java 8 安装sudo yum search jdksudo yum install java-1.8.0-openjdksudo 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.zipsudo 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/antlr4sudo unzip -d opt/antlr4 opt/antlr4-cpp-runtime-4.9.3-source.zipsudo mkdir opt/antlr4/buildcd /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 buildsudo 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 installsudo makesudo make installsudo 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 extensioncd contrib/babelfishpg_moneymakemake install# Install babelfishpg_common extensioncd ../babelfishpg_commonmakemake install# Install babelfishpg_tds extensioncd ../babelfishpg_tdsmakemake install# Installs the babelfishpg_tsql extensioncd ../babelfishpg_tsqlmakemake install
7.其他安装步骤
sudo mkdir -p usr/local/pgsql/data
sudo adduser postgres
sudo chown -R postgres:postgres $INSTALLATION_PATHsudo chown -R postgres:postgres /usr/local/pgsql/data
sudo su postgres$INSTALLATION_PATH/bin/initdb -D /usr/local/pgsql/data
listen_addresses = '*'shared_preload_libraries = 'babelfishpg_tds'
$INSTALLATION_PATH/bin/pg_ctl -D /usr/local/pgsql/data start
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
/* 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 TRUSThost all all 10.16.6.9/32 TRUST
10.windows 安装SQL Server远程客户端






