深色模式
PostgreSQL 入门部署
摘要:本文完成 PostgreSQL 的安装与初始化,创建业务库与只读账号,配置监听与客户端认证(pg_hba.conf),并给出 psql 常用命令,适合第一次接触 PG 的运维。
适用环境
bash
cat /etc/os-release | grep -E '^(ID|VERSION_ID)='
# 确认 5432 端口未被占用
ss -lntp | grep 54321
2
3
2
3
操作步骤
1. 安装
bash
# RHEL/Rocky 9
sudo yum install -y postgresql-server postgresql
# Debian/Ubuntu
sudo apt-get install -y postgresql postgresql-contrib1
2
3
4
2
3
4
2. 初始化数据目录并启动
bash
# RHEL 系需先初始化
sudo postgresql-setup --initdb
sudo systemctl enable --now postgresql
sudo systemctl status postgresql1
2
3
4
2
3
4
危险
initdb 只在空目录上执行一次;对已有数据目录执行会破坏数据。数据目录默认在 /var/lib/pgsql/data(RHEL)或 /var/lib/postgresql/…/main(Debian)。
3. 登录并创建库与用户
bash
sudo -u postgres psql1
sql
CREATE USER app_rw WITH PASSWORD 'Str0ngPass!2026';
CREATE DATABASE shopdb OWNER app_rw;
\c shopdb
GRANT ALL ON SCHEMA public TO app_rw;
CREATE USER app_ro WITH PASSWORD 'Str0ngPass!2026';
GRANT CONNECT ON DATABASE shopdb TO app_ro;
GRANT USAGE ON SCHEMA public TO app_ro;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO app_ro;1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
4. 配置远程访问
bash
# postgresql.conf
sudo -u postgres vi /var/lib/pgsql/data/postgresql.conf
# listen_addresses = '*' # 或指定内网 IP
# port = 5432
# pg_hba.conf:按最小来源原则放行
# host shopdb app_rw 10.0.1.0/24 scram-sha-256
sudo systemctl reload postgresql1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
危险
host all all 0.0.0.0/0 trust 表示任何人无需密码即可登录,生产环境绝对禁止;至少使用 scram-sha-256 并限制网段。
5. psql 常用命令
sql
\l -- 列出数据库
\du -- 列出用户
\dt -- 列出当前库的表
\conninfo -- 查看当前连接信息
\q -- 退出1
2
3
4
5
2
3
4
5
bash
psql -h 10.0.1.20 -U app_rw -d shopdb -c "SELECT version();"1
验证
bash
sudo -u postgres psql -c "SELECT version();"
psql -h 10.0.1.20 -U app_ro -d shopdb -c "\dt" # 只读账号可列出表
pg_isready -h 127.0.0.1 -p 5432 # accepting connections1
2
3
2
3
常见坑
WARNING
改完 pg_hba.conf 必须 reload 才生效;改 listen_addresses/shared_buffers 这类参数需要 restart。
WARNING
PG 中「用户」是实例级的 role,「数据库」之间不共享数据;连错库是新手最常见的困惑,用 \c dbname 切换。
WARNING
远程连不上时按顺序排查:listen_addresses → 防火墙 → pg_hba.conf 规则顺序(自上而下首个匹配生效)。