ITPub博客

首页 > 数据库 > 数据库开发技术 > Babelfish for PostgreSQL在centos8下的安装说明

Babelfish for PostgreSQL在centos8下的安装说明

原创 数据库开发技术 作者:Jet_Zhang 时间:2022-05-03 15:00:00 0 删除 编辑

    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的工作原理

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-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.安装基础软件包

编译Babelfish源代码,需要安装以下附加软件包:
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
如果碰到安装报错问题一: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=$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.配置运行脚本

在编译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/pgsqlmkdir "$INSTALLATION_PATH"
为避免安装错误,先更改安装目录的所有权,命令如下:
#sudo chown -R <your user>:<your group> "$INSTALLATION_PATH"sudo chown -R guanhongchao:guanhongchao /usr/local/pgsql


5.命令编译Babelfish

使用以下命令编译Babelfish源代码:
cd $HOME/babelfish-for-postgresql/postgresql_modified_for_babelfish
make # Compiles the Babefish for PostgreSQL enginecd contrib
make # Compiles the PostgreSQL default extensionscd ..
make install # Installs the Babelfish for PostgreSQL enginecd 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 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-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/antlr4sudo 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 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 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 extensioncd contrib/babelfishpg_moneymakemake install
# Install babelfishpg_common extensioncd ../babelfishpg_commonmake make install
# Install babelfishpg_tds extensioncd ../babelfishpg_tdsmake make install
# Installs the babelfishpg_tsql extensioncd ../babelfishpg_tsqlmake 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_PATHsudo 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            TRUSThost    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下的安装已经到此完成。

原文作者:Halo Tech;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论
中国南方Oracle用户组(SOUG)联合创始人,Oracle ACE,曾服务于国外某大型银行,曾担任国内某中型保险公司的技术经理,现为易景科技合伙人、首席架构师、CTO。主要研究方向数据库内核。

注册时间:2024-06-26

  • 博文量
    124
  • 访问量
    542488