postgresqlanlios88centos8_0">babelfish-for-postgresql在anlios8.8(centos8)安装
Babelfish for PostgreSQL 扩展了您的 PostgreSQL 数据库,能够接受来自 Microsoft SQL Server 客户端的数据库连接。这样做允许最初为 SQL Server 构建的应用程序直接使用 PostgreSQL,与传统迁移相比,只需更改代码,并且无需更改数据库驱动程序。
T-SQL 即 Transact-SQL,是 SQL 在 Microsoft SQL Server 上的增强版,它是用来让应用程序与 SQL Server 沟通的主要语言。
本文无论是centos系列的系统还是ubantu系列的系统都能安装成功。
提前说明:如果你想把babelfish与其他类型得pg数据库比如一些国产数据库结合使用,除非你有较强得功底或者你就是干数据库得,不然较难达到,因为可以看到,下面有一个安装包就是pg官网为babelfish修改的pgsql版本,所以要用于非postgresql的话,请先分析难度。
1.依赖安装
1.1安装相关依赖。
我们需要一个具有 root 权限的用户,可以指令前加sudo。
以下指令主要针对于Centos系列的依赖名称,再ubantu系列名称可以绘有所不同可以去官网找依赖,官网是ubantu的教程。
并且以下指令有的是工具的依赖,防止后续在操作的时候还需要下载这里一次性下载了多个依赖和工具比如git、unzip等工具,只是在整个操作中会使用到并不是安装babelfish必须依赖。
sudo yum install -y gcc make bison flex libxml2 libxml2-devel libxslt libxslt-devel openssl openssl-devel readline readline-devel zlib zlib-devel openldap-devel pam-devel uuid uuid-devel libuuid-devel cmake icu libicu libicu-devel gawk curl java-1.8.0-openjdk-devel python3-devel postgresql-devel pkgconfig unixODBC unixODBC-devel net-tools unzip gcc-c++ git
或者使用已经下载好的依赖文件夹导入rpm安装包进行依赖安装。
2.安装babelfish
2.1下载安装包
cd /opt
# 为babelfish修改的pgsql
git clone https://github.com/babelfish-for-postgresql/postgresql_modified_for_babelfish.git
# babelfish扩展
git clone https://github.com/babelfish-for-postgresql/babelfish_extensions.git# 下载antlr4
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
# 下载cmake
sudo 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
如果上面地址下载不成功就使用浏览器去下载之后上传的linux,因为很多安装包是国外网站。
2.1.1将babelfish安装包以及依赖上传到服务器/opt/路径
直接下载的就不用上传
2.2安装
接下来,我们就开始编译安装吧。
# 解压 如果上传的时候是压缩包上传的需要解压,直接下载的无需操作这一步
cd /opt
sudo unzip /opt/babelfish_extensions.zip
sudo unzip /opt/postgresql_modified_for_babelfish.zip# 正式开始安装步骤
# 创建安装目录INSTALLATION_PATH=/usr/local/pgsql
mkdir "$INSTALLATION_PATH"# 构建配置
cd /opt/postgresql_modified_for_babelfish# 在编译Babelfish源代码之前,我们首先需要在源代码的目录中运行配置脚本,配置编译命令如下:
sudo ./configure CFLAGS="-ggdb" \
--prefix=${INSTALLATION_PATH} \
--enable-debug \
--with-libxml \
--with-uuid=ossp \
--with-icu \
--with-extra-version="Babelfish for PostgreSQL"
如果configure时遇到问题,没有就跳过:
# 给./configure文件赋执行权限
sudo chmod -R 777 configure# 然后再重新执行上面的指令./configure......
# 接着执行编译安装
# 编译安装
cd /opt/postgresql_modified_for_babelfish
sudo make # Compiles the Babefish PostgreSQL enginecd contrib
sudo make # Compiles the PostgreSQL default extensionscd ..
sudo make install # Installs the Babelfish PostgreSQL enginecd contrib
sudo make install # Installs the PostgreSQL default extensions
2.3 安装cmake、Antlr4为安装扩展做准备
# 1.安装 cmake
curl -L https://github.com/Kitware/CMake/releases/download/v3.20.6/cmake-3.20.6-linux-x86_64.sh --output /opt/cmake-3.20.6-linux-x86_64.shchmod +x /opt/cmake-3.20.6-linux-x86_64.sh/opt/cmake-3.20.6-linux-x86_64.sh --prefix=/usr/local --skip-licensecp /usr/local/bin/cmake /usr/bin/# 2.安装antlr
curl https://www.antlr.org/download/antlr4-cpp-runtime-4.9.3-source.zip --output /opt/antlr4-cpp-runtime-4.9.3-source.zip sudo unzip -d /opt/antlr4 /opt/antlr4-cpp-runtime-4.9.3-source.zipsudo 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.3-complete.jar" \-DCMAKE_INSTALL_PREFIX=/usr/local -DWITH_DEMO=True#3.下面编译的过程需要网络,需要访问git:
sudo make
sudo make install
sudo cp /usr/local/lib/libantlr4-runtime.so.4.9.3 "$INSTALLATION_PATH/lib"
2.4 环境变量设置
# 我们已经安装了Babelfish for PostgreSQL引擎,还需要设置几个环境变量,接下来才继续构建babelf扩展。
# PG_CONFIG:指向在Babelfish平台PostgreSQL的引擎安装pg_config文件的位置。
# PG_SRC: 指向 Babelfish for PostgreSQL 引擎源文件夹的位置。
# cmake: 指向包含 cmake 二进制文件的路径INSTALLATION_PATH=/usr/local/pgsql
export PG_CONFIG=$INSTALLATION_PATH/bin/pg_config
export PG_SRC=/opt/postgresql_modified_for_babelfish
export cmake=/usr/local/bin/cmake
2.5编译babelfish扩展
以下安装只要没有报错,就是安装成功。
# Install babelfishpg_money extension
cd /opt/babelfish_extensions/contrib/babelfishpg_money
sudo make
sudo make install# Install babelfishpg_common extension
cd ../babelfishpg_common
sudo make
sudo make install# Install babelfishpg_tds extension
cd ../babelfishpg_tds
sudo make
sudo make install# Installs the babelfishpg_tsql extension
cd ../babelfishpg_tsql
sudo make
sudo make install
1.再安装遇到报错,这种情况依赖环境没有引入成功:
解决办法1:
重新执行:
INSTALLATION_PATH=/usr/local/pgsqlexport PG_CONFIG=$INSTALLATION_PATH/bin/pg_configexport PG_SRC=/opt/postgresql_modified_for_babelfishexport cmake=/usr/local/bin/cmake
解决办法2:
使用以下指令:sudo make PG_CONFIG=/usr/local/pgsql/bin/pg_config PG_SRC=/opt/postgresql_modified_for_babelfish cmake=/usr/local/bin/cmakesudo make install PG_CONFIG=/usr/local/pgsql/bin/pg_config PG_SRC=/opt/postgresql_modified_for_babelfish cmake=/usr/local/bin/cmake在每个make和make install 后都在加上这个路径。
解决办法3:
cd ~ sudo vim .bashrc在文档底部输入export PG_CONFIG=/usr/local/pgsql/bin/pg_configexport PG_SRC=/opt/postgresql_modified_for_babelfishexport cmake=/usr/local/bin/cmake然后执行source .bashrc
3.初始化及配置 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/datavim $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
4.连接babelfish
都部署完成后,我们现在可以连接 Babelfish了。在Linux环境下,可以使用psql、tsql、sqlcmd 这三个客户端工具连接。当然,你也可以在 Windows 环境使用 SQL Server Management Studio (SSMS) 来连接。
apt-get install -y postgresql-client apt-get install -y freetds-binlsb_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://mp.weixin.qq.com/s/-Rwf9R5utg_wYi91ZcUsFA