本文围绕 PostgreSQL(简称 pgsql)日常运维核心需求,从基础使用、备份与恢复、远程连接配置、密码重置四大核心板块,详细讲解了 PostgreSQL 的实操命令与关键配置,覆盖库表管理、模式(Schema)操作、数据操作等基础能力,以及备份恢复、远程访问、账户安全等运维必备技能,同时明确了 PostgreSQL 的特有特性(如模式隔离、系统表 / 视图),为 PostgreSQL 的日常管理与基础运维提供了完整的实操方案。
一、基础使用:核心操作与元命令
PostgreSQL 的基础操作需通过postgres 超级用户 执行,交互式终端 psql 中以\开头的元命令是快速管理的核心(类似 MySQL 的 SHOW 语句),同时支持标准 SQL 命令,核心操作涵盖数据库、数据表、模式、数据四大维度,且内置系统表 / 视图用于查询元信息。
(一)核心元命令速查
PostgreSQL 的元命令是日常操作的核心,常用元命令如下:
表格
| 元命令 | 功能 | 补充 |
|---|---|---|
| \l | 列出所有数据库 | \l+ 扩展输出(含大小、表空间、描述) |
| \c 库名 | 切换数据库 | 等价于 \connect 库名 |
| \dn | 列出所有模式 | - |
| \db | 列出所有表空间 | - |
| \dt | 列出当前库的所有表 | \dt 模式.* 查指定模式表;\dt . 查所有表(含系统表) |
| \d 表名 | 查看表结构 | \d+ 扩展输出表详细信息 |
| \du | 列出所有用户 | - |
| ? | 查看元命令帮助 | - |
| \q | 退出 psql 终端 | - |
(二)数据库操作
支持元命令 + SQL 命令双方式操作,可实现库的增删查、切换、大小查看,核心依赖pg_database 系统表(存储所有数据库元信息,类似 MySQL 的 information_schema):
- 查库:\l / \l+ / SELECT datname FROM pg_database;
- 建库:CREATE DATABASE 库名;
- 删库:DROP DATABASE 库名;
- 切换库:\c 库名;
- 查库大小:pg_database_size (' 库名 ')(字节);pg_size_pretty (pg_database_size (' 库名 '))(人性化单位,如 kB/MB)。
(三)数据表操作
支持标准 SQL 类型,还可自定义数据类型,核心操作含增删查、结构查看、表复制,可通过pg_tables 视图查询表元信息:
- 查表:\dt / \d / SELECT * FROM pg_tables WHERE schemaname='public';
- 建表:CREATE TABLE 表名 (字段 类型,...);(如 CREATE TABLE test (id int,name char (10));)
- 复制表:CREATE TABLE 新表 AS TABLE 原表;(复制表结构 + 数据)
- 删表:DROP TABLE 表名;
- 查结构:\d 表名;
(四)模式(Schema)操作
模式是 PostgreSQL 的特有核心特性 ,为数据库内的逻辑容器(类似文件系统文件夹),用于组织数据库对象、避免命名冲突、实现权限隔离,与 MySQL 无此概念有显著区别,核心操作如下:
- 核心特性:同一数据库中不同模式可存在同名表,跨模式查询需显式指定模式名(如 schema1.users)或通过 search_path 设置默认模式;
- 建模式:CREATE SCHEMA 模式名;
- 删模式:DROP SCHEMA 模式名;(空模式);DROP SCHEMA 模式名 CASCADE;(强制删除模式 + 所有对象)
- 查模式:\dn / SELECT schema_name FROM information_schema.schemata;
- 默认模式:所有数据库默认含public 模式,未指定模式时对象默认创建在 public 中;
- 搜索路径(search_path):控制模式解析优先级,类似 PATH 环境变量,SHOW search_path; 查看,SET search_path TO 模式 1, 模式 2; 修改;
- 建表到指定模式:CREATE TABLE 模式名。表名 (字段 类型,...);
- 查当前模式:SELECT current_schema ();
(五)数据操作
支持标准 SQL 的增删改查,语法简单且与 MySQL 基本一致:
- 新增:INSERT INTO 表名 VALUES (值 1, 值 2,...);
- 查询:SELECT * FROM 表名 WHERE 条件;
- 修改:UPDATE 表名 SET 字段 = 值 WHERE 条件;
- 删除:DELETE FROM 表名 WHERE 条件;
二、备份与恢复:三种方式 + 核心工具
PostgreSQL 需定期备份,核心有SQL 转储、文件系统级备份、连续归档 三种方式,其中SQL 转储 为日常主流方式,依赖pg_dump(备份)、psql/pg_restore(恢复)、pg_dumpall(整簇备份)三大工具,备份文件可跨版本、跨架构迁移,且备份过程不阻塞普通数据库操作。
(一)核心备份方式:SQL 转储
- 核心工具:
pg_dump,为 PostgreSQL 客户端应用,可远程备份,需超级用户权限(或指定表 / 模式的读权限); - 基本用法:
pg_dump 库名 > 备份文件(输出为 SQL 文本文件); - 远程备份:指定主机 / 端口 / 用户,
pg_dump -h 主机 -p 端口 -U 用户 库名 > 备份文件; - 备份特性:备份为数据库快照,仅包含备份开始时刻的数,备份过程中更新的数据不被记录;不阻塞普通操作,仅阻塞需排他锁的操作(如 ALTER TABLE)。
(二)恢复操作
根据备份文件类型选择恢复工具,文本文件用psql,非文本文件用pg_restore,恢复前需手动创建空数据库(基于 template0):
- 基本恢复:
psql 库名 < 备份文件(恢复前需执行createdb -T template0 库名创建空库); - 严格恢复:
psql --set ON_ERROR_STOP=on 库名 < 备份文件(遇错误立即退出); - 事务级恢复:
psql -1 库名 < 备份文件(整库恢复为单个事务,要么全成要么全回滚); - 跨服务器直接迁移:
pg_dump -h 源主机 库名 | psql -h 目标主机 库名(通过管道直接传输,无需中间文件); - 恢复后优化:执行
ANALYZE更新统计信息,供查询优化器使用。
(三)整簇备份:pg_dumpall
pg_dump仅备份单个数据库,pg_dumpall 用于备份整个数据库集簇(所有数据库 + 集簇级信息:角色、表空间),核心用法:
- 备份:
pg_dumpall > 备份文件; - 恢复:
psql -f 备份文件 postgres(恢复到 postgres 库,需超级用户权限); - 单独备份集簇信息:
pg_dumpall --globals-only(仅备份角色、表空间,配合 pg_dump 实现整簇完整备份)。
三、远程连接配置:两步核心配置 + 认证方式
PostgreSQL 默认仅允许本地(127.0.0.1)连接,远程连接需修改监听地址 和访问权限 两大配置文件,同时支持多种认证方式,开发 / 测试环境可用trust(免密),生产环境需用安全认证(如 scram-sha-256/md5)。
(一)核心配置文件路径
根据安装方式不同,配置文件路径不同,核心为postgresql.conf(监听配置)和pg_hba.conf(访问权限):
- dnf/yum 安装:/var/lib/pgsql/data/;
- 源码编译安装:/usr/local/pgsql/data/。
(二)两步配置实现远程连接
- 修改监听地址 :编辑
postgresql.conf,将listen_addresses = 'localhost'改为listen_addresses = '*'(监听所有 IP),重启服务systemctl restart postgresql; - 配置访问权限 :编辑
pg_hba.conf,在IPv4 local connections下添加规则,格式为host 数据库 用户名 客户端IP 认证方式,示例:host all all 0.0.0.0/0 trust(允许所有 IP、所有用户、所有库远程连接,免密认证); - 重启服务:
systemctl restart postgresql,验证端口:ss -tnl(查看 5432 端口是否监听 0.0.0.0)。
(三)认证方式说明
- trust:免密认证,直接连接,仅适用于开发 / 测试环境,生产环境禁止使用;
- scram-sha-256/md5 :密码认证,PostgreSQL 新版本推荐
scram-sha-256,需先为用户设置密码:ALTER USER postgres WITH PASSWORD '密码';; - ident:本地认证,适用于本地连接(默认配置)。
(四)远程连接验证
客户端执行命令,根据认证方式选择是否输入密码:
- 免密(trust):
psql -h 服务器IP -U postgres; - 密码认证(scram-sha-256/md5):
psql -h 服务器IP -U postgres,按提示输入密码即可。
四、密码重置:五步实操,快速恢复账户
忘记 PostgreSQL 超级用户(postgres)密码时,可通过修改pg_hba.conf临时开启本地免密认证,重置密码后恢复原配置,核心为五步实操,全程需 root 权限操作:
- 备份配置文件 :备份 pg_hba.conf,防止配置丢失:
cp /var/lib/pgsql/data/pg_hba.conf /var/lib/pgsql/data/pg_hba.conf.bak; - 修改认证方式 :编辑 pg_hba.conf,将本地 IPv4 连接的认证方式(scram-sha-256/md5)改为
trust,示例:host all all 127.0.0.1/32 trust; - 重启服务 :使配置生效,
systemctl restart postgresql; - 重置密码 :以 postgres 用户登录,执行
ALTER USER postgres WITH PASSWORD '新密码';; - 恢复原配置 :将备份的配置文件覆盖原文件,
cp /var/lib/pgsql/data/pg_hba.conf.bak /var/lib/pgsql/data/pg_hba.conf,重启服务即可,后续登录需输入新密码。
五、核心总结
- 操作核心 :PostgreSQL 日常操作依赖postgres 超级用户 和元命令,元命令是快速管理的关键,同时支持标准 SQL,系统表 / 视图(pg_database、pg_tables)是查询元信息的基础;
- 特有特性 :模式(Schema) 是 PostgreSQL 与 MySQL 的核心区别之一,作为数据库内的逻辑容器,可实现对象隔离、避免命名冲突,需通过 search_path 控制解析优先级;
- 备份恢复 :SQL 转储 是日常主流方式,
pg_dump(单库)、pg_dumpall(整簇)为核心工具,备份文件可跨版本、跨架构迁移,恢复前需手动创建基于 template0 的空数据库; - 远程连接 :核心为修改监听地址(postgresql.conf) 和访问权限(pg_hba.conf),认证方式需区分环境,开发 / 测试用 trust,生产用 scram-sha-256/md5;
- 账户安全:密码重置通过临时修改 pg_hba.conf 开启本地免密实现,操作后必须恢复原配置,保障数据库安全;
- 运维要点:PostgreSQL 的配置文件路径随安装方式变化,日常操作需注意区分;所有配置修改后均需重启服务生效,备份恢复后建议执行 ANALYZE 优化查询。
掌握以上内容可独立完成 PostgreSQL 的基础运维工作,包括库表管理、模式设计、备份恢复、远程访问、账户安全等,为后续性能调优、高可用部署等高级功能打下基础。