暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

Babelfish for PostgreSQL在centos8下的安装说明

原创 Halo Tech 2023-11-16
1169

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向PostgreSQL添加了一个端点,它可以理解SQL Server连接协议表格数据流(TDS)和SQL Server常用的T-SQL编程语言构造。对T-SQL的支持包括SQL方言、游标、目录视图、数据类型、触发器、存储过程和函数等元素。

1.下载源代码

Babelfish源代码分为两个存储库,一个是PostgreSQL数据库引擎源代码,支持Babelfish所需的协议、语言解析器和功能的更改;另一个是支持T-SQL协议、T-SQL语言、TDS协议等的扩展源代码。如果已安装git,在编译Babelfish之前,执行git clone 下载对应的源代码到/usr/local/babelfish-for-postgresql 目录下,命令如下操作:
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.安装基础软件包

编译Babelfish源代码,需要安装以下附加软件包:
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
如果碰到安装报错问题一:CentOS-8 - AppStream 为 repo ‘AppStream’ 下载元数据失败,解决方法如下
      进入/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=$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.配置运行脚本

     在编译Babelfish源代码之前,我们首先需要在源代码的目录中运行配置脚本,配置编译命令如下:
 ./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/pgsql

5.命令编译Babelfish

    使用以下命令编译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 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 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.其他安装步骤

在启动Babelfish之前,创建一个data目录,更改目录的所有权,并设置配置变量。首先,创建数据目录 /usr/local/pgsql/data:
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.配置允许远程连接

Postgresql 数据库部署在服务器上时,如果要允许其他电脑远程连接,则需要对Postgresql 进行配置,否则,远程客户端则会出现FATAL: no pg_hba.conf entry for host “XXX” user “”xxx“”的错误。解决的方法是在Babelfish安装目录下找到pg_hba.conf文件,对其进行修改,将允许连接的ip地址配置到文件中的 #IPv4 local connections 即可,添加允许连接的远程客户端IP(10.16.6.9)如下:
# IPv4 local connections:
host    all             all             127.0.0.1/32            TRUST
host    all             all             10.16.6.9/32            TRUST

10.windows 安装SQL Server远程客户端

SQL server 下载URL https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads;安装ssms(SQL Server Management Studio),并设置防火墙允许1433端口通过防火墙访问postgresql数据库。安装完成后打开SSMS,进入SQL Server 客户端登录界面如下



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

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论