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

Babelfish for PostgreSQL在centos8下的安装说明

Halo Tech 2022-05-03
750

    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-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源代码:
                      cd $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下的安装已经到此完成。
                                                文章转载自Halo Tech,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                                评论