en un clic
postgresql
PostgreSQL 备份恢复、用户权限、慢查询分析、连接池配置、性能调优
Installer avec Codex ou Claude Copiez ce prompt, collez-le dans Codex, Claude ou un autre assistant, puis laissez-le vérifier la page du skill et l'installer pour vous.
Menu
PostgreSQL 备份恢复、用户权限、慢查询分析、连接池配置、性能调优
Installer avec Codex ou Claude Copiez ce prompt, collez-le dans Codex, Claude ou un autre assistant, puis laissez-le vérifier la page du skill et l'installer pour vous.
Basé sur la classification professionnelle SOC
生成或审计模块的 SPEC.md。使用场景:用户要求"给 XX 模块写 spec"、"审计所有 spec"、"检查 spec 是否过期"。
Automates SailFish release workflow: fix build/type errors, update CHANGELOG (EN + CN), run npm version with pre/post hooks. Use when the user asks to release, 发版, 发布, bump version, or update changelog.
后端代码修改后,通过 CLI 测试验证功能正确性。使用场景:修改了 electron/services/ 下的代码需要测试、准备提交代码前跑回归、用户要求"跑测试"/"验证一下"。
完成新功能开发或较大修改后,使用本机 Claude CLI 进行代码审查。
使用 ts-morph 静态分析工具查询代码结构(类层次、方法签名、引用、依赖等),替代手动读源码。使用场景:需要了解类的方法/属性、继承链、符号引用、文件结构、依赖关系时。
When committing or staging changes, only include files related to the current task or conversation; do not stage or commit unrelated modifications. Use when the user asks to commit, stage, 提交, or when preparing to run git add/commit.
| name | PostgreSQL 运维手册 |
| description | PostgreSQL 备份恢复、用户权限、慢查询分析、连接池配置、性能调优 |
| version | 1.0.0 |
psql -h <host> -U <user> -d <dbname>
# 常用元命令
\l # 列出数据库
\dt # 列出表
\du # 列出用户/角色
\conninfo # 当前连接信息
\x # 切换扩展显示
SELECT version();
# 单库备份(自定义格式,支持并行恢复)
pg_dump -U postgres -Fc dbname > backup.dump
# 单库备份(SQL 格式)
pg_dump -U postgres dbname > backup.sql
# 全库备份
pg_dumpall -U postgres > all_databases.sql
# 恢复(自定义格式)
pg_restore -U postgres -d dbname backup.dump
# 恢复(SQL 格式)
psql -U postgres -d dbname < backup.sql
# 并行备份/恢复(加速大库)
pg_dump -U postgres -Fd -j 4 -f backup_dir dbname
pg_restore -U postgres -d dbname -j 4 backup_dir
-- 创建用户
CREATE USER appuser WITH PASSWORD 'password';
-- 授权
GRANT CONNECT ON DATABASE dbname TO appuser;
GRANT USAGE ON SCHEMA public TO appuser;
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO appuser;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO appuser;
-- 只读用户
CREATE USER readonly WITH PASSWORD 'password';
GRANT CONNECT ON DATABASE dbname TO readonly;
GRANT USAGE ON SCHEMA public TO readonly;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO readonly;
-- 查看权限
\du+
SELECT * FROM information_schema.role_table_grants WHERE grantee = 'appuser';
-- 启用 pg_stat_statements(需在 postgresql.conf 中配置)
-- shared_preload_libraries = 'pg_stat_statements'
CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
-- Top 10 慢查询
SELECT query, calls, mean_exec_time, total_exec_time
FROM pg_stat_statements
ORDER BY mean_exec_time DESC
LIMIT 10;
-- 当前活跃查询
SELECT pid, now() - pg_stat_activity.query_start AS duration, query, state
FROM pg_stat_activity
WHERE state != 'idle'
ORDER BY duration DESC;
-- 终止长查询
SELECT pg_terminate_backend(<pid>);
日志中记录慢查询(postgresql.conf):
log_min_duration_statement = 1000 # 记录超过 1 秒的查询
log_statement = 'none' # 避免记录所有查询
-- 查看连接数
SELECT count(*) FROM pg_stat_activity;
SELECT datname, count(*) FROM pg_stat_activity GROUP BY datname;
-- 最大连接数
SHOW max_connections;
-- 空闲连接
SELECT * FROM pg_stat_activity WHERE state = 'idle' AND query_start < now() - interval '10 minutes';
PgBouncer 连接池:
# pgbouncer.ini
[databases]
mydb = host=127.0.0.1 port=5432 dbname=mydb
[pgbouncer]
listen_port = 6432
pool_mode = transaction # 推荐事务级池化
max_client_conn = 1000
default_pool_size = 20
# postgresql.conf
shared_buffers = '内存的25%'
effective_cache_size = '内存的75%'
work_mem = 64MB
maintenance_work_mem = 512MB
wal_buffers = 64MB
max_connections = 200
| 问题 | 排查 |
|---|---|
| 连接数满 | SELECT count(*) FROM pg_stat_activity; → 使用连接池 |
| 表膨胀 | SELECT pg_size_pretty(pg_total_relation_size('tablename')); → VACUUM FULL |
| 锁等待 | SELECT * FROM pg_locks WHERE NOT granted; |
| 复制延迟 | SELECT * FROM pg_stat_replication; 检查 replay_lag |
| 磁盘满 | 清理 WAL:SELECT pg_switch_wal();,检查 pg_wal/ 目录大小 |
# VACUUM(回收死行空间)
VACUUM VERBOSE tablename;
VACUUM ANALYZE; # 同时更新统计信息
# REINDEX(索引膨胀时)
REINDEX INDEX indexname;
REINDEX TABLE tablename;
# 数据库大小
SELECT pg_size_pretty(pg_database_size('dbname'));