以下是 Rocky Linux 9.8 系统下,通过官方仓库安装 PostgreSQL 17 后的标准化首次配置与全流程测试指南,所有操作均适配 RHEL 系官方 RPM 包规范。


前置说明

  • 已通过 PostgreSQL 官方 YUM 仓库安装 postgresql17-server 及基础组件
  • 默认数据目录:/var/lib/pgsql/17/data
  • 默认配置文件均位于上述数据目录内
  • 服务名称:postgresql-17
  • 默认端口:5432

一、初始化数据库集群

PostgreSQL 服务安装完成后不会自动初始化数据目录,需手动执行官方初始化脚本,该操作仅需执行一次。

sudo /usr/pgsql-17/bin/postgresql-17-setup initdb
  • 执行成功输出:Initializing database ... OK
  • 若提示目录已存在,说明已执行过初始化,无需重复操作

二、启动服务并设置开机自启

# 设置开机自启并立即启动服务
sudo systemctl enable --now postgresql-17

# 验证服务运行状态
sudo systemctl status postgresql-17

正常状态应为 active (running),可通过以下命令验证端口监听:

ss -lntp | grep 5432

默认仅监听本地回环地址 127.0.0.1:5432


三、设置数据库超级用户密码

PostgreSQL 会自动创建同名系统用户 postgres,数据库超级用户也为 postgres,默认通过 Unix 域套接字的 peer 认证免密登录,首次配置必须设置密码。

方式一:单行命令快速设置
sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD '你的强密码';"
方式二:交互式设置
# 切换到 postgres 系统用户
sudo su - postgres
# 进入数据库命令行
psql
-- 执行修改密码SQL
ALTER USER postgres WITH PASSWORD '你的强密码';
-- 退出命令行
\q
# 退出 postgres 用户
exit

安全提示:生产环境请使用包含大小写、数字、特殊符号的强密码,禁止使用弱口令。


四、配置本地认证方式(推荐)

默认本地 Unix 域套接字使用 peer 认证,仅允许 postgres 系统用户免密登录。为支持通用的密码登录方式,需修改客户端认证配置文件。

  1. 编辑认证配置文件
sudo vi /var/lib/pgsql/17/data/pg_hba.conf
  1. 找到如下配置行(文件中部,Unix 域套接字配置段)
local   all             all                                     peer

peer 修改为 scram-sha-256(PostgreSQL 17 默认的安全认证算法,安全性远高于 md5):

local   all             all                                     scram-sha-256
  1. 重载配置使生效(无需重启服务)
sudo systemctl reload postgresql-17

修改后,本地可通过密码方式直接登录:

psql -U postgres -h localhost

输入设置的密码即可进入数据库。


五、配置远程访问(按需开启)

若需从其他服务器/客户端连接数据库,需完成以下配置,生产环境仅开放给可信IP段

5.1 修改监听地址

编辑主配置文件:

sudo vi /var/lib/pgsql/17/data/postgresql.conf

找到 listen_addresses 配置项(约第 60 行),默认值为 localhost,修改为:

listen_addresses = '*'          # 监听所有网卡地址
# 生产环境建议指定具体IP: listen_addresses = '192.168.1.100'
5.2 添加远程访问授权规则

再次编辑 pg_hba.conf,在文件末尾添加访问规则:

sudo vi /var/lib/pgsql/17/data/pg_hba.conf

按需选择规则(规则自上而下匹配,命中即停止,精确规则放前):

# 允许指定内网网段所有用户通过密码访问所有数据库(推荐)
host    all             all             192.168.1.0/24          scram-sha-256

# 允许单个指定IP访问
host    all             all             10.0.0.5/32             scram-sha-256

# 允许所有IP访问(仅测试环境使用,生产环境严禁)
# host    all             all             0.0.0.0/0               scram-sha-256
5.3 重启服务生效

修改监听地址需要重启服务,仅修改 pg_hba.conf 执行 reload 即可:

sudo systemctl restart postgresql-17

六、配置系统防火墙

Rocky Linux 9 默认启用 firewalld,需放行 PostgreSQL 服务端口。

方式一:按服务名放行(推荐)
sudo firewall-cmd --permanent --add-service=postgresql
sudo firewall-cmd --reload
方式二:按端口号放行
sudo firewall-cmd --permanent --add-port=5432/tcp
sudo firewall-cmd --reload
验证规则
sudo firewall-cmd --list-all

输出中应包含 postgresql 服务或 5432 端口。

安全建议:生产环境可通过 --add-source 参数限制源IP,仅允许可信地址访问5432端口。


七、SELinux 配置说明

Rocky Linux 9 默认启用 SELinux 强制模式。

  • 使用默认端口 5432 和默认数据目录时,系统自带策略已适配,无需额外配置。
  • 若修改了默认端口、自定义了数据目录,或出现连接权限拒绝,可按以下方式处理:
  1. 临时切换宽容模式(用于排查问题)
sudo setenforce 0
  1. 正式适配(以自定义端口 5433 为例)
# 安装策略管理工具
sudo dnf install -y policycoreutils-python-utils
# 添加端口的SELinux上下文
sudo semanage port -a -t postgresql_port_t -p tcp 5433

不建议永久关闭 SELinux,会显著降低系统安全级别。


八、功能测试与验证

8.1 本地连接测试
psql -U postgres -h localhost

输入密码后进入 postgres=# 命令行即为连接成功。

8.2 创建测试数据库与用户
-- 创建测试数据库
CREATE DATABASE testdb;

-- 创建普通测试用户
CREATE USER testuser WITH PASSWORD 'Test@123456';

-- 授予用户对 testdb 的全部权限
GRANT ALL PRIVILEGES ON DATABASE testdb TO testuser;
8.3 读写功能验证

切换到测试库,执行建表、插入、查询全流程:

-- 切换数据库
\c testdb

-- 创建测试表
CREATE TABLE student (
    id SERIAL PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    age INT,
    create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 插入测试数据
INSERT INTO student (name, age) VALUES ('张三', 20), ('李四', 22);

-- 查询验证
SELECT * FROM student;

正常返回数据则说明数据库读写功能正常。

8.4 退出命令行
\q
8.5 远程连接测试(开启远程后)

在客户端机器使用 psql 或数据库工具(DBeaver、pgAdmin 等)验证:

psql -U postgres -h 服务器IP地址 -p 5432 -d postgres

输入密码后成功连接即远程配置生效。


九、基础性能优化建议(可选)

编辑 postgresql.conf 可进行基础调优,参数需根据服务器内存调整,以下为 4GB 内存服务器参考值:

# 共享缓冲区(建议为系统总内存的25%)
shared_buffers = 1GB

# 有效缓存大小(建议为系统总内存的50%-75%)
effective_cache_size = 3GB

# 单操作工作内存
work_mem = 32MB

# 维护操作内存
maintenance_work_mem = 256MB

修改后重启服务生效:

sudo systemctl restart postgresql-17
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐