导读
postgresql的源码编译安装比较复杂。笔记总结了从pg12-pg15的安装方式并作了抽象。基本上通用于pg12以来的编译安装操作了。在这里分享给大家,希望给大家提供便利。
本文基于Centos7.9-x86_64的环境。
注意:关键的一节是二、配置安装需求,这里是本文的全局配置,以环境变量的形式。一定不要随便起一个会话就执行,得有这些配置变量才行。
Here we go!!! >>>
一、安装依赖包
1.1 操作系统工具包
安装命令:
yum install -y vim lrzsz wget bzip2 unzip net-tools telnet tree mlocate bash-completion
1.2 PG依赖包
安装命令:
yum install -y readline readline-devel zlib zlib-devel bison bison-devel flex perl-ExtUtils-Embed perl-devel \openssl openssl-devel pam pam-devel libxml2 libxml2-devel libxslt libxslt-devel tcl tcl-devel \openldap openldap-devel python python-devel gcc gcc-c++ rsync icu libicu-devel \e2fsprogs-devel uuid uuid-devel libuuid-devel
PG15及以上版本需要 Python3+
yum install -y python3 python3-devel
二、配置安装需求
本文档使用变量来定义需求,命令如下:
export PG_VERSION_NUM=15.3
export PG_NAME=postgresql-${PG_VERSION_NUM}
export PG_PKGFILE_NAME=postgresql-${PG_VERSION_NUM}.tar.bz2
export PG_PKGFILE_MD5=postgresql-${PG_VERSION_NUM}.tar.bz2.md5
export PG_SRC_DEST_DIR=/usr/local/src
export PG_SRC_FULL_PATH=${PG_SRC_DEST_DIR}/${PG_NAME}
export PG_INSTALL_PATH=/opt/pgsql${PG_VERSION_NUM}
export PG_DATA_PARENT_DIR=/pgdata/${PG_VERSION_NUM}
export PG_DATA_FULL_PATH=${PG_DATA_PARENT_DIR}/data
说明:
- PG_VERSION_NUM:版本号,数字小数点组成;
- PG_NAME:源码包解压后的目录名;
- PG_PKGFILE_NAME:源码包完整名称;
- PG_PKGFILE_MD5:源码包验证散列值;
- PG_SRC_DEST:源码安装目标路径;
- PG_SRC_FULL_PATH:源码完整路径,该目录下就是源码;
- PG_INSTALL_PATH:二进制文件的安装目录;
- PG_DATA_PARENT_DIR:数据目录(PGDATA)在这个目录下;
- PG_DATA_FULL_PATH:数据目录(PGDATA)的完整路径,该目录下就是PADATA内容。
三、下载源码
#下载:
wget https://ftp.postgresql.org/pub/source/v${PG_VERSION_NUM}/postgresql-${PG_VERSION_NUM}.tar.bz2
wget https://ftp.postgresql.org/pub/source/v${PG_VERSION_NUM}/postgresql-${PG_VERSION_NUM}.tar.bz2.md5
#校验:
md5sum -c ${PG_PKGFILE_MD5}
#解压到指定位置:
tar -xjvf ${PG_PKGFILE_NAME} -C ${PG_SRC_DEST_DIR}
四、编译安装
4.1 创建 build 目录
进入源码目录执行命令:
mkdir ${PG_SRC_FULL_PATH}/build && cd ${PG_SRC_FULL_PATH}/build
4.2 编译配置
一般配置命令:
../configure --prefix=${PG_INSTALL_PATH} --with-libxml --with-ssl=openssl --with-uuid=ossp \--with-systemd --with-python --with-perl --with-icu
使用编译安装的 ICU 可能需要这样(推荐):
PKG_CONFIG_PATH=/usr/local/lib/pkgconfig \
../configure --prefix=${PG_INSTALL_PATH} --with-libxml --with-ssl=openssl --with-uuid=ossp \--with-systemd --with-python --with-perl --with-icu
你需要知道ICU编译安装到哪个路径下,这里的PKG_CONFIG_PATH
是指代添加到 pkg-config 搜索路径的目录。
4.3 编译安装
执行命令:
make -j$(nproc) && make install -j$(nproc)
五、创建用户和目录
5.1 创建用户
创建操作系统用户postgres
:
/usr/sbin/groupadd postgres
/usr/sbin/useradd -g postgres postgres -c "${PG_NAME} Server"
echo "postgres:666666" | chpasswd
5.2 创建相关目录
创建一些目录以及相应的权限:
mkdir -p ${PG_INSTALL_PATH}
mkdir -p ${PG_DATA_FULL_PATH}
ln -sf ${PG_INSTALL_PATH} /opt/pgsql
chown -R postgres.postgres ${PG_INSTALL_PATH}
chown -R postgres.postgres ${PG_DATA_PARENT_DIR}
chmod 0700 ${PG_INSTALL_PATH}
chmod 0700 ${PG_DATA_FULL_PATH}
5.3 配置环境变量
配置用户 postgres 环境变量:
cat >> /home/postgres/.bash_profile <<-EOF################################ add by QCJ at `date +%Y-%m-%d_%H:%M:%S` ################################
umask 022
export LD_LIBRARY_PATH=${PG_INSTALL_PATH}/lib:/usr/local/lib:\$LD_LIBRARY_PATH
export PATH=${PG_INSTALL_PATH}/bin:\$PATH
export PGDATA=${PG_DATA_PARENT_DIR}/data
################################ the End Line at `date +%Y-%m-%d_%H:%M:%S` ################################EOF
注意:
这里有个目录
/usr/local/lib
是其他库文件的所在路径,例如前面ICU自己编译安装可能会安装到这里。就是说,你自己的一些库文件最好是放到这里。否则你需要将目录添加到这里。
六、切换用户操作
6.1 切换用户
这一节的操作需要切换到用户postgres
执行。切换命令:
su - postgres
6.2 初始化
initdb -A md5 -D $PGDATA -E 'UTF8' --pwfile=<(printf "%s" "666666")
6.3 配置客户端验证
cat >> $PGDATA/pg_hba.conf <<-EOF
################################ add by QCJ at `date +%Y-%m-%d_%H:%M:%S` ################################
# IPv4 local connections:
host all all 0.0.0.0/0 md5
################################ the End Line at `date +%Y-%m-%d_%H:%M:%S` ################################EOF
6.4 免密文件
cat > ~/.pgpass <<-EOF
# host:port:database:user:password
localhost:5432:postgres:postgres:666666
EOFchmod 0600 ~/.pgpass
6.5 启动数据库
pg_ctl start
停掉服务,因为我们下一节要自启动配置:
pg_ctl stop
七、自启动服务
切回root
用户,注意是切回,如果不是切回需要执行以下第二章节的环境变量配置。执行以下命令配置服务:
cat >/usr/lib/systemd/system/postgresql.service <<-EOF
[Unit]
Description=PostgreSQL v${PG_VERSION_NUM} database server
Documentation=https://www.postgresql.org
Requires=network.target local-fs.target
After=network.target local-fs.target[Service]
Type=forkingUser=postgres
Group=postgresEnvironment=PGDATA=/pgdata/${PG_VERSION_NUM}/dataOOMScoreAdjust=-1000ExecStart=/opt/pgsql${PG_VERSION_NUM}/bin/pg_ctl start -D \${PGDATA}
ExecStop=/opt/pgsql${PG_VERSION_NUM}/bin/pg_ctl stop -D \${PGDATA}
ExecReload=/opt/pgsql${PG_VERSION_NUM}/bin/pg_ctl reload -D \${PGDATA}TimeoutSec=0[Install]
WantedBy=multi-user.target
EOF
确认服务已经停掉,如果没有停掉请切到postgres
停掉。然后root
下执行以下命令启用并启动服务:
systemctl enable --now postgresql.service
<<< There you go!!!
总结
好了,这就是我分享给大家的源码编译安装步骤。有问题请在csdn上留言哈。