赞
踩
postgresql的源码编译安装比较复杂。笔记总结了从pg12-pg15的安装方式并作了抽象。基本上通用于pg12以来的编译安装操作了。在这里分享给大家,希望给大家提供便利。
本文基于Centos7.9-x86_64的环境。
注意:关键的一节是二、配置安装需求,这里是本文的全局配置,以环境变量的形式。一定不要随便起一个会话就执行,得有这些配置变量才行。
Here we go!!! >>>
安装命令:
yum install -y vim lrzsz wget bzip2 unzip net-tools telnet tree mlocate bash-completion
安装命令:
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}
进入源码目录执行命令:
mkdir ${PG_SRC_FULL_PATH}/build && cd ${PG_SRC_FULL_PATH}/build
一般配置命令:
../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 搜索路径的目录。
执行命令:
make -j$(nproc) && make install -j$(nproc)
创建操作系统用户postgres
:
/usr/sbin/groupadd postgres
/usr/sbin/useradd -g postgres postgres -c "${PG_NAME} Server"
echo "postgres:666666" | chpasswd
创建一些目录以及相应的权限:
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}
配置用户 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自己编译安装可能会安装到这里。就是说,你自己的一些库文件最好是放到这里。否则你需要将目录添加到这里。
这一节的操作需要切换到用户postgres
执行。切换命令:
su - postgres
initdb -A md5 -D $PGDATA -E 'UTF8' --pwfile=<(printf "%s" "666666")
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
cat > ~/.pgpass <<-EOF
# host:port:database:user:password
localhost:5432:postgres:postgres:666666
EOF
chmod 0600 ~/.pgpass
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=forking User=postgres Group=postgres Environment=PGDATA=/pgdata/${PG_VERSION_NUM}/data OOMScoreAdjust=-1000 ExecStart=/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上留言哈。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。