PostgreSQL日常维护

一、基本操作

1. 连接数据库

使用 psql 命令行工具连接:

复制代码
psql -U username -d dbname -h host -p port
  • -U:指定用户名
  • -d:指定数据库名
  • -h:指定主机(默认本地)
  • -p:指定端口(默认 5432)

2. 用户与权限管理

  • 创建用户

    复制代码
    CREATE USER myuser WITH PASSWORD 'mypassword';
  • 授权

    复制代码
    -- 授予数据库所有权限
    GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;
    -- 授予表的查询、插入权限
    GRANT SELECT, INSERT ON mytable TO myuser;

3. 数据库操作

  • 创建数据库

    复制代码
    CREATE DATABASE mydb;
  • 删除数据库

    复制代码
    DROP DATABASE mydb;
  • 切换数据库 (psql 中):

    复制代码
    \c mydb

4. 表操作

  • 创建表

    复制代码
    CREATE TABLE mytable (
        id SERIAL PRIMARY KEY,
        name VARCHAR(50) NOT NULL,
        age INT
    );
  • 查看表结构

    复制代码
    \d mytable
  • 插入数据

    复制代码
    INSERT INTO mytable (name, age) VALUES ('Alice', 30);
  • 查询数据

    复制代码
    SELECT * FROM mytable;
  • 更新数据

    复制代码
    UPDATE mytable SET age = 31 WHERE name = 'Alice';
  • 删除数据

    复制代码
    DELETE FROM mytable WHERE name = 'Alice';

5. 常用 psql 元命令

  • \l:列出所有数据库
  • \dt:列出当前数据库的所有表
  • \d table_name:查看表结构
  • \q:退出 psql
  • \h:查看 SQL 命令帮助
  • \?:查看 psql 元命令帮助

二、日常维护

1. 日志管理与监控

postgresql.conf 中配置日志:

复制代码
logging_collector = on
log_directory = 'pg_log'
log_filename = 'postgresql-%Y-%m-%d.log'
log_min_duration_statement = 1000  # 记录慢查询(单位:毫秒)
log_checkpoints = on
log_connections = on
log_disconnections = on
log_lock_waits = on

日常巡检:每日检查日志,重点关注慢查询、死锁、连接失败等。

2. 数据清理(VACUUM)与事务 ID 管理

PostgreSQL 的 MVCC 机制会产生 "死元组",需通过 VACUUM 回收空间并防止事务 ID 回卷。

  • 自动清理 (默认开启):

    复制代码
    autovacuum = on
    autovacuum_vacuum_scale_factor = 0.2  # 表更新20%时触发
  • 手动清理

    复制代码
    VACUUM;  -- 全库常规清理(不锁表)
    VACUUM FULL mytable;  -- 单表深度清理(锁表,大表慎用)
  • 监控事务 ID 年龄

    复制代码
    SELECT datname, age(datfrozenxid) FROM pg_database;

3. 统计信息更新(ANALYZE)

ANALYZE 更新表和索引的统计信息,供查询优化器使用:

复制代码
ANALYZE;  -- 全库更新
ANALYZE mytable;  -- 单表更新

4. 备份与恢复

  • 逻辑备份 (适合小数据量):

    复制代码
    pg_dump -U username -d mydb -f backup.sql  # 备份
    psql -U username -d mydb -f backup.sql     # 恢复
  • 物理备份 (适合大数据量,支持 PITR):

    复制代码
    pg_basebackup -U username -D /path/to/backup -Ft -z -P

    配合 WAL 归档可实现基于时间点恢复(PITR)

  • 备份验证:定期在测试环境恢复备份,确保数据可用。

5. 性能监控与优化

  • 查看活跃连接

    复制代码
    SELECT * FROM pg_stat_activity;
  • 查看慢查询 (需启用 pg_stat_statements 扩展):

    复制代码
    SELECT query, calls, mean_time FROM pg_stat_statements ORDER BY mean_time DESC LIMIT 10;
  • 查看缓存命中率 (应 > 99%):

    复制代码
    SELECT sum(heap_blks_hit) / (sum(heap_blks_hit) + sum(heap_blks_read)) AS cache_hit_ratio FROM pg_statio_user_tables;

6. 索引维护

  • 查找未使用的索引

    复制代码
    SELECT schemaname, relname, indexrelname FROM pg_stat_user_indexes WHERE idx_scan = 0;
  • 重建膨胀索引 (生产环境推荐 CONCURRENTLY 避免锁表):

    复制代码
    REINDEX INDEX CONCURRENTLY myindex;

7. 配置参数检查

定期调整 postgresql.conf 关键参数:

  • shared_buffers:系统内存的 25%(不超过 8GB)
  • work_mem:单个查询操作内存,根据并发数调整
  • maintenance_work_mem:维护操作内存,可设较大
  • effective_cache_size:系统内存的 50%-75%

通过以上基本操作和日常维护,可保障 PostgreSQL 数据库的稳定、高效运行。建议将关键任务(如备份、日志巡检)自动化,并建立监控告警机制。

相关推荐
十二同学啊6 小时前
向量数据库:从核心原理到 RAG 与 Java 实战
数据库
蓝速科技7 小时前
会议室门牌公告通知发布选型与落地指南丨蓝速科技
大数据·运维·数据库·人工智能·科技
一 乐9 小时前
二手交易平台|基于springboot + vue二手交易平台(源码+数据库+文档)
java·数据库·vue.js·spring boot·小程序
SelectDB10 小时前
同等资源下 Apache Doris 4.2 vs StarRocks 4.1.1:1TB SSB 与 TPC-H 性能实测
大数据·数据库·数据分析
这个DBA有点耶10 小时前
数据库集群与分布式架构:三条技术路线对比、金仓KES RAC实测数据与决策框架
数据库·程序员·架构
MayBaymax10 小时前
MongoDB 索引与事务
java·数据库·mongodb
SelectDB10 小时前
Doris vs ClickHouse:企业 OLAP 走向下一阶段,两种技术路线如何选择
大数据·数据库·数据分析
vx-程序开发10 小时前
【计算机毕设】django校园跑腿服务系统83141
java·数据库·vue.js·spring boot·spring·elasticsearch·django
一 乐11 小时前
养老院管理系统|基于springboot + vue养老院管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·毕业设计
这个DBA有点耶12 小时前
InnoDB页结构深入:页分裂、页合并、填充因子——B+树底层机制全解析
数据库·mysql·架构