PostgreSQL 部署与运维常用命令详解

PostgreSQL 部署与运维常用命令详解

    • [1. 进程管理与监控](#1. 进程管理与监控)
      • [1.1 查看 PostgreSQL 进程 (Linux)](#1.1 查看 PostgreSQL 进程 (Linux))
        • [通过 ps 命令查找进程](#通过 ps 命令查找进程)
        • [通过 netstat 命令查看监听端口(确认服务状态)](#通过 netstat 命令查看监听端口(确认服务状态))
        • [通过 ss 命令查看(推荐,更现代高效)](#通过 ss 命令查看(推荐,更现代高效))
      • [1.2 深入分析进程行为](#1.2 深入分析进程行为)
    • [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)所必需的目录链接功能。
相关推荐
ChaITSimpleLove1 小时前
PostgreSQL 的 SQL 执行过程详解
数据库·sql·postgresql·词法分析·语法分析·执行过程
liurunlin8881 小时前
Nginx权限问题详解及解决方案
运维·nginx
小鸡脚来咯2 小时前
SQL表连接
java·开发语言·数据库
Henray20242 小时前
SQL 窗口函数
大数据·数据库·sql
顶点多余2 小时前
Mysql--索引的操作
数据库·mysql
RDCJM2 小时前
Neo4j图数据库学习(二)——SpringBoot整合Neo4j
数据库·学习·neo4j
杀神lwz2 小时前
MongoDB入门+深入(三)--mongdbSql
数据库·mongodb
枫叶丹42 小时前
复杂SQL性能突围:代价驱动的连接条件下推策略与工程实践
数据库·sql·金仓数据库
聆风吟º2 小时前
直击复杂 SQL 瓶颈:金仓基于代价的连接条件下推技术落地
java·数据库·sql·kingbasees