整体过程如下:
操作系统版本:centos7.7
gcc版本:4.5.8
下载源码
git clone https://github.com/babelfish-for-postgresql/postgresql_modified_for_babelfish.git
git clone https://github.com/babelfish-for-postgresql/babelfish_extensions.git
安装依赖
yum install -y openjdk-8-jre unzip libutfcpp-dev curl
yum install -y gcc-c++
yum install -y uuid uuid-devel libuuid libuuid-devel openssl-devel icu libicu-devel texinfo
yum install -y flex libxml2-devel bison readline-devel zlib-devel cmake uuid uuid-devel uuid-c++ uuid-c+±devel kernel-devel pkgconfig automake
升级openjdk-8-jre
rpm -qa| grep jdk
yum remove copy-jdk-configs-3.3-10.el7_5.noarch
yum install java-11-openjdk.x86_64
升级cmake
mkdir /opt/cmake
cd /opt/cmake
wget https://cmake.org/files/v3.16/cmake-3.16.9.tar.gz
tar -zxvf cmake-3.16.9.tar.gz
cd cmake-3.16.9/
./configure --prefix=/usr/local/make
make && make install
ln -s /usr/local/make/bin/cmake /usr/bin/cmake
升级gcc++(4.8.5->5.3->7.3)
yum groupinstall “Development Tools”
yum install glibc-static libstdc+±static
wget https://ftp.gnu.org/gnu/gcc/gcc-7.3.0/gcc-7.3.0.tar.gz --no-check-certificate
tar -xvzf gcc-7.3.0.tar.gz
cd gcc-7.3.0/
./contrib/download_prerequisites
cd …
mkdir build_gcc
cd build_gcc/
…/gcc-7.3.0/configure --enable-checking=release --enable-language=c,c++ --disable-multilib
make -j23
make install
替换libstdc++.so
strings /usr/lib64/libstdc++.so.6 | grep GLIBC
检查与当前gcc对应的版本信息,我这里是 libstdc++.so.6.0.24
rm libstdc++.so.6.0
ln -s libstdc++.so.6.0 libstdc++.so.6.0.24
删除旧版本
yum remove gcc gcc-c++
ln -s /usr/local/bin/c++ /bin/c++
ln -s /usr/local/bin/g++ /bin/g++
ln -s /usr/local/bin/gcc /bin/gcc
ln -s /usr/local/bin/cc /bin/cc
编译数据库及插件
./configure --prefix=/home/wzb/babelfish CFLAGS=“-ggdb” --enable-debug --with-libxml --with-uuid=ossp --with-icu
make
cd contrib
make
cd …
make install
cd contrib
make install
编译antlr4
以root用户执行
wget https://www.antlr.org/download/antlr4-cpp-runtime-4.9.3-source.zip --no-check-certificate
unzip antlr4-cpp-runtime-4.9.3-source.zip -d antlr4
mkdir build
cd build/
export EXTENSIONS_SOURCE_CODE_PATH=“/home/wzb/babelfish_extensions”
cmake … -DANTLR_JAR_LOCATION=“$EXTENSIONS_SOURCE_CODE_PATH/contrib/babelfishpg_tsql/antlr/thirdparty/antlr/antlr-4.9.2-complete.jar” -DCMAKE_INSTALL_PREFIX=/home/wzb/antlr_build -DWITH_DEMO=True
make && make install
cp /usr/local/lib/libantlr4-runtime.so.4.9.3 “$INSTALLATION_PATH/lib”
编译babelfish插件
export PG_CONFIG=/home/wzb/babelfish/bin/pg_config
export PG_SRC=$HOME/postgresql_modified_for_babelfish
export cmake=/bin/cmake
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
连接Babelfish操作(编译tsql)
wget ftp://ftp.freetds.org/pub/freetds/stable/freetds-1.3.3.tar.gz
./configure --prefix=/usr/local
make && make install
FAQ
Q1:编译中用户的选择
尽量还是使用root用户做编译,最后再授权给一个普通用户,否则有些需要向系统路径下写的操作会不执行,但是也不报错。
Q2:提示版本需要大于5.0
在运行antlr编译的时候会提示当前版本小于5.0,此时需要升级gcc,同时更新libstdc++文件。
Q3:提示undefined symbol: xmlIsCombiningGroup
这个问题是由于libxml2导致的,但是我本身系统中是安装了,最后只能删除数据库,重新make和make install一遍就可以了
参考
https://www.modb.pro/db/237004