PGsql安装教程
一、目标安装方案
最终会得到:
| 项目 | 说明 |
|---|---|
| PostgreSQL版本 | 14.x |
| 安装方式 | 源码编译安装 |
| 依赖安装 | 全部离线RPM |
| 编译目录 | /opt/pgsql_make |
| 安装目录 | /opt/pgsql14 |
| 数据目录 | /opt/pgsql14/data |
| 服务管理 | systemd |
| 用户 | postgres |
二、先检查系统是否具备编译环境
先创建检测脚本:
mkdir /opt/pgsql_make vi /opt/pgsql_make/check_pgsql_env.sh写入:
#!/bin/bash # ========================================================= # PostgreSQL 14 编译环境检测脚本 # 说明: # 1. 区分【必须】与【可选】依赖 # 2. 显示缺失原因与用途 # 3. 兼容 openEuler / CentOS / Kylin / RHEL # ========================================================= echo "==================================================" echo " PostgreSQL 14 编译安装环境检测" echo "==================================================" must_lack=0 optional_lack=0 # --------------------------------------------------------- # 输出颜色 # --------------------------------------------------------- RED='\033[31m' GREEN='\033[32m' YELLOW='\033[33m' BLUE='\033[36m' RESET='\033[0m' # --------------------------------------------------------- # 检测命令 # 参数: # 1: 命令 # 2: 是否必须(must/optional) # 3: 作用说明 # --------------------------------------------------------- check_cmd() { local cmd=$1 local level=$2 local desc=$3 if command -v ${cmd} >/dev/null 2>&1; then echo -e "${GREEN}[OK]${RESET} 命令: ${cmd}" else if [ "${level}" = "must" ]; then echo -e "${RED}[必须,且缺失]${RESET} 命令: ${cmd}" echo -e " 作用: ${desc}" must_lack=1 else echo -e "${YELLOW}[可选,缺失]${RESET} 命令: ${cmd}" echo -e " 作用: ${desc}" optional_lack=1 fi fi } # --------------------------------------------------------- # 检测RPM包 # 参数: # 1: 包名 # 2: 是否必须(must/optional) # 3: 作用说明 # --------------------------------------------------------- check_rpm() { local pkg=$1 local level=$2 local desc=$3 if rpm -q ${pkg} >/dev/null 2>&1; then echo -e "${GREEN}[OK]${RESET} RPM: ${pkg}" else if [ "${level}" = "must" ]; then echo -e "${RED}[必须,且缺失]${RESET} RPM: ${pkg}" echo -e " 作用: ${desc}" must_lack=1 else echo -e "${YELLOW}[可选,缺失]${RESET} RPM: ${pkg}" echo -e " 作用: ${desc}" optional_lack=1 fi fi } echo echo "================ 基础编译工具(必须) ================" check_cmd gcc must "C语言编译器,PostgreSQL核心编译必须" check_cmd g++ optional "提供C++编译支持,部分扩展可能需要" check_cmd make must "执行Makefile编译流程" check_cmd ld must "GNU链接器,生成最终可执行文件" check_cmd perl must "PostgreSQL部分构建脚本依赖Perl" check_cmd tar must "解压源码包" echo echo "================ PostgreSQL核心依赖(必须) ================" check_rpm readline-devel must "提供命令行历史记录与上下方向键支持" check_rpm zlib-devel must "支持数据压缩功能" check_rpm openssl-devel must "支持SSL/TLS加密连接" echo echo "================ PostgreSQL功能增强(可选) ================" check_rpm ncurses-devel optional "如需需安装readline-deve,就必须存在,可忽略" check_rpm libxml2-devel optional "支持XML功能(XML类型/XPath)" check_rpm libxslt-devel optional "支持XML/XSLT转换" check_cmd flex optional "仅开发PostgreSQL源码时需要" check_cmd bison optional "仅修改SQL语法解析器时需要" check_cmd wget optional "在线下载源码包时需要" echo echo "================ 运行环境(建议安装) ================" check_rpm readline optional "psql命令行体验增强" check_rpm zlib optional "运行时压缩支持" check_rpm openssl optional "SSL运行支持" check_rpm libxml2 optional "XML运行支持" check_rpm libxslt optional "XSLT运行支持" echo echo "================ 系统管理工具(建议安装) ================" check_cmd useradd optional "创建postgres用户" check_cmd systemctl optional "注册systemd服务" echo echo "==================================================" if [ ${must_lack} -eq 0 ]; then echo -e "${GREEN}[OK] PostgreSQL14 必须环境完整${RESET}" else echo -e "${RED}[ERROR] PostgreSQL14 必须环境缺失,无法正常编译${RESET}" fi if [ ${optional_lack} -eq 1 ]; then echo -e "${YELLOW}[提示] 存在可选组件缺失,但不影响基础编译安装${RESET}" fi echo "=================================================="赋权:
chmod +x /opt/pgsql_make/check_pgsql_env.sh执行:
/opt/pgsql_make/check_pgsql_env.sh三、联网机器下载 Redis 编译依赖
方式1(推荐):使用 yumdownloader
先安装:
yuminstallyum-utils-y创建目录:
mkdirredis_rpmscdredis_rpms下载:
dnf download--resolve--alldeps\gcc\gcc-c++\make\readline-devel\zlib-devel\openssl-devel\libxml2-devel\libxslt-devel\flex\bison\perl\perl-ExtUtils-Embed\wget\tar作用:
--resolve
会自动下载依赖链。
方式2:在联网服务器中查看版本,并在网上下载
先搜索联网服务器中相关版本,入vim:
rpm -qf $(which vim)得出相关版本到对应发行商rpm源中下载:
查不出具体的系统版本,可以去系统默认的rpm源查看,系统指向的那个路径,一般路径中就有对应的版本
进入源存放目录:
cd /etc/yum.repos.d/查看目录下源内容
#麒麟服务器系统: cat kylin_x86_64.repo #openEuler: cat openEuler.repo麒麟V10: [Index of /NS/V10/V10SP3/os/adv/lic/base/x86_64/Packages/](Index of /NS/V10/)
openEuler: repo.openeuler.org/openEuler-24.03-LTS-SP2/OS/x86_64/Packages/
下在对应rpm,并上传
安装:
rpm -ivh *********.rpm四、下载 PostgreSQL14 源码包
官方下载:
PostgreSQL官网:PostgreSQL Source Download
五、传输到麒麟服务器
把:
postgresql-14.23.tar.gz
传到:
/opt/pgsql_make六、创建postgres用户
groupadd postgres useradd -g postgres postgres设置密码:
passwd postgres密码:
Cqabj@208七、编译安装 PostgreSQL14
1. 解压
cd /opt/pgsql_make tar -zxvf /opt/pgsql_make/postgresql-14.23.tar.gz2. 编译
cd postgresql-14.23创建数据库目录:
mkdir -p /opt/postgreSQL配置:
./configure \ --prefix=/opt/postgreSQL \ --with-openssl \如果成功会看到:
config.status: creating GNUmakefile3. 编译
make -j 4CPU多可以改:
make -j $(nproc)4. 安装
make install八、初始化数据库
1. 创建数据和日志目录(以root用户执行):
mkdir -p /opt/postgreSQL/data mkdir -p /opt/postgreSQL/logs chown -R postgres:postgres /opt/postgreSQL2. 初始化
切换用户:
su - postgres进入数据库bin目录:
cd /opt/postgreSQL/bin初始化,执行:
./initdb -D /opt/postgreSQL/data九、启动 PostgreSQL
启动:
# 尝试启动 ./pg_ctl -D /opt/postgreSQL/data -l /opt/postgreSQL/logs/postgresql.log start # 查看状态 ./pg_ctl -D /opt/postgreSQL/data status # 尝试停止 ./pg_ctl -D /opt/postgreSQL/data stop查看:
ps -ef | grep postgres登录:
./psql新初始化的数据库默认没有密码(或依赖本地系统用户认证),为了远程登录的安全,必须先设置一个强密码:
ALTER USER postgres WITH PASSWORD 'cqabj208';创建"epms2025"数据库
CREATE DATABASE "epms2025" WITH ENCODING = 'UTF8'创建"ep-server2025"数据库
CREATE DATABASE "ep-server2025" WITH ENCODING = 'UTF8'退出pgsql:
exit;或者杀死进程:
ps -ef | grep postgres找出类似postgres -D /opt/postgreSQL/data杀掉
十、配置systemd服务
退回到root用户:
exit创建并编辑 Systemd 服务配置文件:
vi /usr/lib/systemd/system/postgreSQL.service写入:
[Unit] Description=PostgreSQL 14 database server Documentation=https://www.postgresql.org/docs/14/static/ After=network.target [Service] Type=forking User=postgres Group=postgres # 核心环境变量设置 Environment=PGDATA=/opt/postgreSQL/data # 启动、停止、重载命令均使用全路径执行 ExecStart=/opt/postgreSQL/bin/pg_ctl start -D ${PGDATA} -s -w -t 300 ExecStop=/opt/postgreSQL/bin/pg_ctl stop -D ${PGDATA} -s -m fast ExecReload=/opt/postgreSQL/bin/pg_ctl reload -D ${PGDATA} -s KillMode=mixed TimeoutSec=300 [Install] WantedBy=multi-user.target刷新:
systemctl daemon-reload启动:
systemctl start postgreSQL查看状态:
systemctl status postgreSQL#如何没退回终端,是日志太长,按q请退出开机自启:
systemctl enable postgreSQL十一、开放远程连接(可选)
编辑:
vi /opt/postgreSQL/data/postgresql.conf修改:
listen_addresses='*'编辑:
vi /opt/postgreSQL/data/pg_hba.conf增加:
# TYPE DATABASE USER ADDRESS METHOD host all all 0.0.0.0/0 scram-sha-256重启:
systemctl restart postgreSQL十二、最容易踩的坑
| 问题 | 原因 |
|---|---|
| openssl版本不兼容 | 系统自带国密OpenSSL |
| readline缺失 | 最常见 |
| perl模块缺失 | 编译PL/pgSQL时 |
| gcc版本低 | 导致编译失败 |
| locale问题 | initdb报错 |
