PostgreSQL 编译安装通用步骤

news/2024/7/9 21:49:15 标签: 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.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

说明:

  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

#校验:

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
EOF

chmod 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=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上留言哈。


http://www.niftyadmin.cn/n/461931.html

相关文章

深圳阿里云代理商:阿里云服务器的可用区和地域选择有哪些考虑因素?如何优化性能?

阿里云服务器的可用区和地域选择有哪些考虑因素&#xff1f;如何优化性能&#xff1f;   选择阿里云服务器时&#xff0c;可用区和地域选择是一个非常关键的环节。本文将为您详细解析在这个过程中需要考虑的因素以及如何优化性能。   一、阿里云服务器的可用区和地域选择的…

彻底解决Springboot中路径参数带 (%2F)的问题

彻底解决Springboot中路径参数带/(%2F)的问题 背景 前两天突然出现了一个线上问题&#xff0c;有同事反应我提供的接口报400的错误。接口路径如下 PATCH /v1/basic/owners/{owner_code}/skus/{sku}&#xff0c;经过排查发现是sku参数中有/因此springboot转义后直接报错了。由…

多线程编程1.0

多线程编程1.0 描述 可以提高多线程编程的安全性&#xff1a; 1.避免共享可变状态 尽量避免在多个线程之间共享可变状态。如果必须要共享&#xff0c;那么就需要采用同步机制来保证线程安全&#xff0c;例如使用synchronized关键字、ReentrantLock或者Semaphore等。 2.最小…

【致敬未来的攻城狮计划】打卡3:点亮LED

点亮LED 本文主要参考文章&#xff1a;【致敬未来的攻城狮计划】— 连续打卡第十一天&#xff1a;FSP固件库开发点亮第一个灯。_嵌入式up的博客-CSDN博客 在32阶段我们已经接触过类似做法了。初始化引脚模式&#xff08;可以手动库函数&#xff0c;或者在工具包图形化界面里配…

chatgpt赋能python:用Python分析电影评分数据

用Python分析电影评分数据 Python是一种流行的数据分析和可视化工具&#xff0c;它可以让我们更深入地了解电影的评分数据。在本文中&#xff0c;我们将使用Python来分析一些电影评分数据&#xff0c;并试图找出一些有趣的模式和趋势。 数据来源 我们将使用公共数据集IMDb电…

实训四:索引与视图 - MySQL-索引和视图

MySQL-索引和视图 第1关&#xff1a;建立索引任务描述参考代码 第2关&#xff1a;建立视图并更新视图任务描述参考代码 任务描述任务要求参考代码 第1关&#xff1a;建立索引 任务描述 任务&#xff1a; 第一题 在jdxx数据表根据省份sf、城市cs、区县qx和名称name建立主索引z…

NodeJS Mocha测试⑩④

文章目录 ✨文章有误请指正&#xff0c;如果觉得对你有用&#xff0c;请点三连一波&#xff0c;蟹蟹支持&#x1f618;前言Mocha 1、编写测试 2、SumJS代码 3、使用内置断言库 4、第三方库 chai断言库 5、第三方库 异步断言 6、http测试 7、钩子函数更多包工具总…

Windows编译OpenSSL Win10系统 vs2010

近期因为项目需要&#xff0c;需要用到openssl动态库&#xff0c;现在将编译的过程记录一下&#xff1b; 操作系统&#xff1a;Win10 64位 编译器&#xff1a;VS2010 编译步骤如下&#xff1a; 1、下载openssl版本&#xff08;下载地址&#xff1a;​http://www.openssl.or…