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)所必需的目录链接功能。
相关推荐
江华森31 分钟前
数据中心基础设施运维实战:概述与实验环境搭建
运维
心梦缘-雪雁35 分钟前
SQL Server 查询数据存在哪个表里
数据库
迪菲赫尔曼42 分钟前
【基础篇 11】把官方源码放到服务器:版本、解压层级和安装位置,一次弄清楚
运维·服务器·开发语言·人工智能·python·yolo·目标检测
lusklusklusk1 小时前
Python 巡检脚本:进程运行状态、数据库写入时效检查及邮件通知与告警
数据库·python·oracle
GeW2 小时前
产业新优势基础软件的人才底盘,从Linux与数据库开始
linux·数据库
SelectDB2 小时前
Doris Arrow Flight SQL 高速读取协议实战:与 Snowflake 客户端取数链路对照
大数据·数据库·数据分析
曼岛_2 小时前
[图解密码学]第4章 古典密码
java·数据库·密码学
by209992 小时前
Linux GCC/G++ 编译与 Makefile 构建
linux·运维·服务器·经验分享
螺丝钉tina2 小时前
[Playwright][08] Upload 模块自动化:如何设计真实业务测试用例?
运维·自动化·测试用例
迪菲赫尔曼3 小时前
【基础篇 12】把环境与源码接起来:检查 GPU,再安装服务器上的项目
运维·服务器·开发语言·人工智能·python·yolo·目标检测