PGsql安装教程

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.gz

2. 编译

cd postgresql-14.23

创建数据库目录:

mkdir -p /opt/postgreSQL

配置:

./configure \ --prefix=/opt/postgreSQL \ --with-openssl \

如果成功会看到:

config.status: creating GNUmakefile

3. 编译

make -j 4

CPU多可以改:

make -j $(nproc)

4. 安装

make install

八、初始化数据库

1. 创建数据和日志目录(以root用户执行):

mkdir -p /opt/postgreSQL/data mkdir -p /opt/postgreSQL/logs chown -R postgres:postgres /opt/postgreSQL

2. 初始化

切换用户:

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报错