Rocky9+ 部署PostgreSQL-16 PostgreSQL(简称PGSQL)是一款被誉为“世界上最先进的开源关系型数据库”它以极致的严谨性、强大的JSON支持以及近乎无限的插件扩展能力成为了开发者处理复杂业务和高可靠性数据的终极选择。硬件配置4GB或更多RAM2个CPU或更多CPU硬盘50GB或更多1、使用yum源安装PGSQLRockyLinux 9 部署 PGSQL-16Rocky9更换阿里云yum源sed-es|^mirrorlist|#mirrorlist|g\-es|^#baseurlhttp://dl.rockylinux.org/$contentdir|baseurlhttps://mirrors.aliyun.com/rockylinux|g\-i.bak\/etc/yum.repos.d/*ocky-*.repo dnf clean alldnf makecache关闭防火墙和selinux# 永久关闭SELinuxsed-is/^SELINUXenforcing/SELINUXdisabled//etc/selinux/config setenforce0# 永久关闭防火墙systemctl disable--nowfirewalld1.添加 PostgreSQL 官方仓库dnfinstall-yhttps://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm2.禁用系统自带的旧版 PostgreSQL 模块必须步骤dnf-qymodule disable postgresql3.安装 PostgreSQL 服务器例如安装版本16dnfinstall-ypostgresql16-server4.初始化数据库/usr/pgsql-16/bin/postgresql-16-setup initdb5.启动 PostgreSQL 服务并设置开机自启systemctlenablepostgresql-16 systemctl start postgresql-166.检查服务状态systemctl status postgresql-167.设置 PostgreSQL 用户密码# 进PGSQL吗命令行sudo-upostgres psql# 修改密码设置为123456ALTERUSERpostgres WITH PASSWORD123456;# 退出PGSQL\q8.配置远程访问编辑/var/lib/pgsql/16/data/postgresql.conf通过默认仓库安装路径是/var/lib/pgsql/data/postgresql.conf取消注释并修改先备份后修改sed-i.baks|#listen_addresses localhost|listen_addresses *|/var/lib/pgsql/16/data/postgresql.conf修改 身份认证配置文件pg_hba.confcp/var/lib/pgsql/16/data/pg_hba.conf{,_bak}cat EOF /var/lib/pgsql/16/data/pg_hba.conf # 本地Unix套接字登录规则本机操作系统用户免密登录数据库 local all all peer # 规则1仅允许10.0.0.0/24网段使用postgres账号登录所有业务数据库 host all postgres 10.0.0.0/24 scram-sha-256 # 规则2除10.0.0.0/24网段外所有IPv4地址禁止postgres账号登录业务库 host all postgres 0.0.0.0/0 reject # 规则3所有IPv6地址禁止postgres账号登录业务库 host all postgres ::/0 reject # 规则4所有IPv4网段、所有数据库、所有普通业务账号密码认证无网段限制 host all all 0.0.0.0/0 scram-sha-256 # 规则5所有IPv6网段、所有数据库、所有普通业务账号密码认证无网段限制 host all all ::/0 scram-sha-256 # 复制规则1仅10.0.0.0/24网段允许postgres账号执行流复制、pg_basebackup备份操作 host replication postgres 10.0.0.0/24 scram-sha-256 # 复制规则2非10段所有IPv4地址禁止postgres账号发起复制备份连接 host replication postgres 0.0.0.0/0 reject # 复制规则3所有IPv6地址禁止postgres账号发起复制备份连接 host replication postgres ::/0 reject # 复制规则4全网段允许其他数据库账号执行复制备份操作 host replication all 0.0.0.0/0 scram-sha-256 # 复制规则5全网段IPv6允许其他数据库账号执行复制备份操作 host replication all ::/0 scram-sha-256 # 本地套接字复制备份权限本机pg_basebackup本地备份免密 local replication all peer # 本机IPv4回环地址复制备份权限密码认证 host replication all 127.0.0.1/32 scram-sha-256 # 本机IPv6回环地址复制备份权限密码认证 host replication all ::1/128 scram-sha-256 EOF修改完成后重启PGSQLsystemctl restart postgresql-162、使用编译部署PGSQL1.关闭 SELinux、防火墙# 永久关闭SELinuxsed-is/^SELINUXenforcing/SELINUXdisabled//etc/selinux/config setenforce0# 永久关闭防火墙systemctl disable--nowfirewalld2.安装编译依赖包dnf groupinstall-yDevelopment Toolsdnfinstall-yreadline-devel zlib-devel openssl-devel libxml2-devel\libxslt-devel perl-devel python3-devel gcc gcc-cmakecmake bison flex\libicu-devel libuuid-devel libzstd-devel systemd-devel lz4-devel3.系统内核 / 资源限制调优文件句柄、进程数限制cat/etc/security/limits.d/99-postgres.confEOF postgres soft nproc 65535 postgres hard nproc 65535 postgres soft nofile 1048576 postgres hard nofile 1048576 postgres soft stack unlimited postgres hard stack unlimited EOF内核网络 / 内存参数cat/etc/sysctl.d/99-postgresql-16.confEOF # PostgreSQL 16 生产环境内核调优参数 # 共享内存、信号量、文件句柄、网络TCP优化 kernel.shmmax 68719476736 kernel.shmmni 4096 kernel.shmall 4294967296 kernel.sem 50100 6412800 50100 128 fs.file-max 767200 net.ipv4.tcp_syncookies 1 net.ipv4.tcp_tw_reuse 1 net.ipv4.tcp_keepalive_time 60 net.ipv4.tcp_fin_timeout 30 EOF生效内核参数sysctl-p4.创建 PG 专用运行用户 目录# 创建运行用户useradd-m-s/bin/bash postgres# 设置密码生产高强度密码passwdpostgres# 创建pgsql的部署、数据、日志目录mkdir-p/usr/local/pgsql16/{data,log}# 授权归属chown-Rpostgres:postgres /usr/local/pgsql16# 数据目录严格权限700仅postgres用户可访问chmod700-R/usr/local/pgsql16/data# 日志、备份放宽为750同组可读chmod750-R/usr/local/pgsql16/log5.下载源码包切换到临时编译目录configure 编译参数开启 SSL、ICU 国际化、Python/Perl 扩展、systemd 集成、LZ4/ZSTD 压缩./configure\--prefix/usr/local/pgsql16\--with-systemd\--with-openssl\--with-icu\--with-readline\--with-zlib\--with-lz4\--with-zstd\--with-python\--with-libxml\--with-libxslt编译 安装make-j$(nproc)makeinstall安装官方扩展插件cdcontribmake-j$(nproc)makeinstall6.配置全局变量cat/etc/profile.d/pgsql16.shEOF export PGHOST127.0.0.1 export PGHOME/usr/local/pgsql16 export PATH\$PGHOME/bin:\$PATHexport PGDATA/usr/local/pgsql16/data export LD_LIBRARY_PATH\$PGHOME/lib:\$LD_LIBRARY_PATHEOF生效环境变量source/etc/profile.d/pgsql16.sh验证版本psql--version7.初始化数据库切换 postgres 用户执行指定 UTF8 区域彻底规避中文乱码# 先切换到 postgres 用户su- postgres# 执行初始化操作initdb\-D/usr/local/pgsql16/data\-EUTF8\--localeen_US.utf8\-Upostgres\-W参数说明-E UTF8数据库集群默认字符集 UTF8--localeen_US.utf8排序 / 区域编码统一 UTF8跨平台兼容-W初始化时设置超级用户 postgres 高强度密码8.生产级配置文件调优进入数据目录修改 核心配置postgresql.conf pg_hba.confcd/usr/local/pgsql16/datapostgresql.conf关键生产参数备份原配置文件cppostgresql.conf postgresql.conf.bak写入生产配置cat postgresql.conf EOF # 基础网络 listen_addresses * port 5432 max_connections 1000 # 内存调优 shared_buffers 1GB # PG专用共享内存缓冲区,推荐物理内存 25% work_mem 16MB maintenance_work_mem 1GB effective_cache_size 3GB # 查询优化器估算可用总缓存,一般设总内存 70~75% # 磁盘IO wal_buffers 16MB wal_level replica max_wal_size 1GB min_wal_size 1GB wal_compression on # 日志生产必须开启 logging_collector on log_directory /usr/local/pgsql16/log log_filename postgresql-%Y-%m-%d.log log_rotation_size 100MB log_rotation_age 1d log_statement mod log_checkpoints on log_connections on log_disconnections on # 字符集 client_encoding utf8 default_text_search_config pg_catalog.english # 自动vacuum清理 autovacuum on autovacuum_max_workers 4 autovacuum_naptime 30s # SSL加密建议开启,如果没有需要直接注释 ssl on ssl_prefer_server_ciphers on # 并行查询 max_parallel_workers_per_gather 4 max_parallel_workers 8 # 设置时区 timezone Asia/Shanghai log_timezone Asia/Shanghai # 检查点优化减少IO瞬时毛刺 checkpoint_timeout 10min checkpoint_completion_target 0.9 # 自动清理阈值微调及时清理膨胀表 autovacuum_vacuum_scale_factor 0.05 autovacuum_analyze_scale_factor 0.02 autovacuum_vacuum_cost_delay 2ms EOF生产环境必须生成自签证书切换 postgres 用户进入 data 目录生成 10 年有效期证书su- postgrescd/usr/local/pgsql16/data# 生成私钥自签证书openssl req-new-x509-days3650-nodes-text-outserver.crt-keyoutserver.key-subj/CNpg16-server# 私钥权限严格0600chmod600server.keychownpostgres:postgres server.crt server.keypg_hba.conf关键生产参数备份原配置文件cppg_hba.conf pg_hba.conf_bak写入配置cat EOF /var/lib/pgsql/16/data/pg_hba.conf # 本地Unix套接字登录规则本机操作系统用户免密登录数据库 local all all peer # 规则1仅允许10.0.0.0/24网段使用postgres账号登录所有业务数据库 host all postgres 10.0.0.0/24 scram-sha-256 # 规则2除10.0.0.0/24网段外所有IPv4地址禁止postgres账号登录业务库 host all postgres 0.0.0.0/0 reject # 规则3所有IPv6地址禁止postgres账号登录业务库 host all postgres ::/0 reject # 规则4所有IPv4网段、所有数据库、所有普通业务账号密码认证无网段限制 host all all 0.0.0.0/0 scram-sha-256 # 规则5所有IPv6网段、所有数据库、所有普通业务账号密码认证无网段限制 host all all ::/0 scram-sha-256 # 复制规则1仅10.0.0.0/24网段允许postgres账号执行流复制、pg_basebackup备份操作 host replication postgres 10.0.0.0/24 scram-sha-256 # 复制规则2非10段所有IPv4地址禁止postgres账号发起复制备份连接 host replication postgres 0.0.0.0/0 reject # 复制规则3所有IPv6地址禁止postgres账号发起复制备份连接 host replication postgres ::/0 reject # 复制规则4全网段允许其他数据库账号执行复制备份操作 host replication all 0.0.0.0/0 scram-sha-256 # 复制规则5全网段IPv6允许其他数据库账号执行复制备份操作 host replication all ::/0 scram-sha-256 # 本地套接字复制备份权限本机pg_basebackup本地备份免密 local replication all peer # 本机IPv4回环地址复制备份权限密码认证 host replication all 127.0.0.1/32 scram-sha-256 # 本机IPv6回环地址复制备份权限密码认证 host replication all ::1/128 scram-sha-256 EOF9.Systemd 服务托管创建 systemd 服务文件cat /etc/systemd/system/postgresql-16.service EOF [Unit] DescriptionPostgreSQL 16 Database Server Documentationhttps://www.postgresql.org/docs/16/static/ Afternetwork.target [Service] Typeforking Userpostgres Grouppostgres EnvironmentPGDATA/usr/local/pgsql16/data EnvironmentPGHOME/usr/local/pgsql16 ExecStart/usr/local/pgsql16/bin/pg_ctl start -D \${PGDATA} -l /usr/local/pgsql16/log/pg_start.log ExecStop/usr/local/pgsql16/bin/pg_ctl stop -D \${PGDATA} -m fast ExecReload/usr/local/pgsql16/bin/pg_ctl reload -D \${PGDATA} PIDFile/usr/local/pgsql16/data/postmaster.pid PrivateTmptrue LimitNOFILE1048576 LimitNPROC65535 [Install] WantedBymulti-user.target EOF重载 systemd、设置开机自启systemctl daemon-reload systemctlenablepostgresql-16# 启动数据库systemctl start postgresql-16# 查看运行状态systemctl status postgresql-1610.日志自动轮转创建 logrotate 规则cat /etc/logrotate.d/pg16 EOF /usr/local/pgsql16/log/postgresql-*.log { daily rotate 15 compress delaycompress missingok copytruncate owner postgres postgres } EOF11.初始化生产安全加固(可选)密码加密策略su- postgres psql-Upostgres# 设置超级用户强密码ALTERUSERpostgres WITH PASSWORDSuperStrongPG162026;# 设置全局默认密码加密SET password_encryptionscram-sha-256;ALTER SYSTEM SET password_encryptionscram-sha-256;SELECT pg_reload_conf();配置成功截图创建业务专用库与业务账号-- 创建业务数据库 CREATE DATABASE business_db ENCODINGUTF8LC_COLLATEen_US.utf8LC_CTYPEen_US.utf8;-- 创建业务只读账号 CREATEUSERbusiness_r WITH PASSWORDBusinessRead2026;-- 创建业务读写账号 CREATEUSERbusiness_rw WITH PASSWORDBusinessWrite2026;-- 赋权 GRANT CONNECT ON DATABASE business_db TO business_r,business_rw;GRANT SELECT ON ALL TABLES IN SCHEMA public TO business_r;GRANT SELECT,INSERT,UPDATE,DELETE,CREATE ON ALL TABLES IN SCHEMA public TO business_rw;日常运维命令# 启停服务systemctl start/stop/restart postgresql-16# 重载配置systemctl reload postgresql-16# 查看实时日志tail-f/data/pg16_log/postgresql-$(date%Y-%m-%d).log# 备份全库pg_dump-Upostgres-dbusiness_db-Fc-f/data/pg16_backup/business_$(date%Y%m%d).dump# 登录数据库psql-Upostgres-dpostgres-h127.0.0.1