当前位置:   article > 正文

PostgreSQL 编译安装通用步骤_postgresql编译安装

postgresql编译安装

导读

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

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 
  • 1
  • 2
  • 3
  • 4

PG15及以上版本需要 Python3+

yum install -y python3 python3-devel
  • 1

二、配置安装需求

本文档使用变量来定义需求,命令如下:

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

说明:

  1. PG_VERSION_NUM:版本号,数字小数点组成;
  2. PG_NAME:源码包解压后的目录名;
  3. PG_PKGFILE_NAME:源码包完整名称;
  4. PG_PKGFILE_MD5:源码包验证散列值;
  5. PG_SRC_DEST:源码安装目标路径;
  6. PG_SRC_FULL_PATH:源码完整路径,该目录下就是源码;
  7. PG_INSTALL_PATH:二进制文件的安装目录;
  8. PG_DATA_PARENT_DIR:数据目录(PGDATA)在这个目录下;
  9. 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
  • 1
  • 2

#校验:

md5sum -c ${PG_PKGFILE_MD5}
  • 1

#解压到指定位置:

tar -xjvf ${PG_PKGFILE_NAME} -C ${PG_SRC_DEST_DIR}
  • 1

四、编译安装

4.1 创建 build 目录

进入源码目录执行命令:

mkdir ${PG_SRC_FULL_PATH}/build && cd ${PG_SRC_FULL_PATH}/build
  • 1

4.2 编译配置

一般配置命令:

../configure --prefix=${PG_INSTALL_PATH} --with-libxml --with-ssl=openssl --with-uuid=ossp \
             --with-systemd --with-python --with-perl --with-icu 
  • 1
  • 2

使用编译安装的 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 
  • 1
  • 2
  • 3

你需要知道ICU编译安装到哪个路径下,这里的PKG_CONFIG_PATH是指代添加到 pkg-config 搜索路径的目录。

4.3 编译安装

执行命令:

make -j$(nproc) && make install -j$(nproc)
  • 1

五、创建用户和目录

5.1 创建用户

创建操作系统用户postgres

/usr/sbin/groupadd postgres
/usr/sbin/useradd -g postgres postgres -c "${PG_NAME} Server"
echo "postgres:666666" | chpasswd
  • 1
  • 2
  • 3

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}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

注意:

这里有个目录/usr/local/lib是其他库文件的所在路径,例如前面ICU自己编译安装可能会安装到这里。就是说,你自己的一些库文件最好是放到这里。否则你需要将目录添加到这里。

六、切换用户操作

6.1 切换用户

这一节的操作需要切换到用户postgres执行。切换命令:

su - postgres
  • 1

6.2 初始化

initdb -A md5 -D $PGDATA -E 'UTF8' --pwfile=<(printf "%s" "666666")
  • 1

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

6.4 免密文件

cat > ~/.pgpass <<-EOF
# host:port:database:user:password
localhost:5432:postgres:postgres:666666
EOF

chmod 0600 ~/.pgpass
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

6.5 启动数据库

pg_ctl start
  • 1

停掉服务,因为我们下一节要自启动配置:

pg_ctl stop
  • 1

七、自启动服务

切回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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

确认服务已经停掉,如果没有停掉请切到postgres停掉。然后root下执行以下命令启用并启动服务:

systemctl enable --now postgresql.service
  • 1

<<< There you go!!!

总结

好了,这就是我分享给大家的源码编译安装步骤。有问题请在csdn上留言哈。

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/905125
推荐阅读
相关标签
  

闽ICP备14008679号