PostgreSQL 部署与运维常用命令详解
-
- [1. 进程管理与监控](#1. 进程管理与监控)
-
- [1.1 查看 PostgreSQL 进程 (Linux)](#1.1 查看 PostgreSQL 进程 (Linux))
-
- [通过 ps 命令查找进程](#通过 ps 命令查找进程)
- [通过 netstat 命令查看监听端口(确认服务状态)](#通过 netstat 命令查看监听端口(确认服务状态))
- [通过 ss 命令查看(推荐,更现代高效)](#通过 ss 命令查看(推荐,更现代高效))
- [1.2 深入分析进程行为](#1.2 深入分析进程行为)
-
- 列出进程打开的文件
- [strace 追踪系统调用(高级调试)](#strace 追踪系统调用(高级调试))
- [2. 文件与目录权限管理](#2. 文件与目录权限管理)
-
- [2.1 修改属主命令 chown](#2.1 修改属主命令 chown)
- [3. 环境变量配置](#3. 环境变量配置)
-
- [3.1 设置与示例](#3.1 设置与示例)
- [4. 操作系统用户的重要约束](#4. 操作系统用户的重要约束)
-
- [4.1 Linux 系统要求](#4.1 Linux 系统要求)
- [4.2 Windows 系统要求](#4.2 Windows 系统要求)
1. 进程管理与监控
1.1 查看 PostgreSQL 进程 (Linux)
PostgreSQL 在 Linux 中以后台进程(守护进程)运行。
通过 ps 命令查找进程
bash
ps aux | grep postgres
示例输出:
bash
postgres 28979 0.0 0.5 512340 102044 ? Ss Feb10 0:05 /usr/local/pgsql/bin/postgres -D /var/lib/pgsql/data
postgres 28981 0.0 0.1 512432 31220 ? Ss Feb10 0:00 postgres: logger
postgres 28983 0.0 0.2 512432 40840 ? Ss Feb10 0:12 postgres: checkpointer
通过 netstat 命令查看监听端口(确认服务状态)
方法一:
bash
netstat -natp | grep post
方法二:
bash
netstat -a | grep PGSQL
示例输出:
显示 PostgreSQL 默认端口 5432 正在监听
bash
tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN 28979/postgres
通过 ss 命令查看(推荐,更现代高效)
bash
ss -tnlp | grep post
示例输出:
bash
LISTEN 0 128 0.0.0.0:5432 0.0.0.0:* users:(("postgres",pid=28979,fd=6))
1.2 深入分析进程行为
说明:用于诊断进程卡死、性能问题或异常行为。
列出进程打开的文件
bash
# 查看 PID 为 28979 的 postgres 进程打开了哪些文件、套接字等
lsof -p 28979
示例输出片段:
bash
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
postgres 28979 postgres cwd DIR 253,1 4096 1048577 /var/lib/pgsql/data
postgres 28979 postgres txt REG 253,1 5438768 1050650 /usr/local/pgsql/bin/postgres
postgres 28979 postgres 6u IPv4 123456 0t0 TCP *:postgresql (LISTEN)
strace 追踪系统调用(高级调试)
bash
# 追踪 PID 为 28979 的进程的所有系统调用,输出到文件,并记录时间戳
strace -o /tmp/postgres_trace.txt -T -tt -e trace=all -p 28979
参数说明:
-o:输出到文件-T:显示调用耗时-tt:显示微秒级时间戳-e trace=all:追踪所有系统调用-p:指定进程 PID
说明:此命令常用于分析 SQL 查询慢、进程无响应等底层原因。
2. 文件与目录权限管理
2.1 修改属主命令 chown
PostgreSQL 的数据目录和文件必须属于一个特定的操作系统用户(通常是 postgres)。
基本语法:
bash
chown [新属主]:[新属组] 文件或目录
示例:
- 将
/data/pgdata目录及其下所有内容的属主改为postgres用户,属组改为postgres组:
bash
sudo chown -R postgres:postgres /data/pgdata
- 仅修改属主:
bash
sudo chown postgres /data/pgdata/postgresql.conf
- 查看修改结果:
bash
ls -la /data/pgdata/
说明:输出应显示属主为
postgres
3. 环境变量配置
PostgreSQL 的运行依赖两个核心环境变量,通常在启动脚本或用户配置文件中设置。
3.1 设置与示例
PGHOME:指向 PostgreSQL 软件的安装目录(二进制文件所在位置)。PGDATA:指向数据库集群的数据目录(配置文件、数据文件所在位置)。
在 shell 配置文件(如 ~/.bashrc 或 ~/.bash_profile)中设置:
bash
export PGHOME=/usr/local/pgsql
export PGDATA=/var/lib/pgsql/data
export PATH=$PGHOME/bin:$PATH
使配置立即生效:
bash
source ~/.bashrc
验证变量:
bash
echo $PGHOME
echo $PGDATA
which psql # 此时应指向 $PGHOME/bin/psql
4. 操作系统用户的重要约束
4.1 Linux 系统要求
- 必须使用非 root 用户 :绝不能使用
root或其他具备系统管理权限的账号运行 PostgreSQL,这是基本的安全要求。 - 专用用户 :通常创建名为
postgres的专用系统用户来运行数据库服务。
创建系统用户和组的示例:
bash
sudo groupadd postgres
sudo useradd -g postgres postgres
sudo mkdir /data/pgdata
sudo chown postgres:postgres /data/pgdata
4.2 Windows 系统要求
- 只支持在 NTFS 文件系统上部署。
- 只有
NTFS支持创建表空间(Tablespace)所必需的目录链接功能。