postgresql
Flagged{"isSafe":false,"isSuspicious":true,"riskLevel":"high","findings":[{"category":"system_harm","severity":"high","description":"示例中包含创建具有 SUPERUSER 权限的用户 admin 的 SQL 命令,这可能导致权限提升和安全风险。","evidence":"CREATE USER admin WITH SUPERUSER PASSWORD 'password';"},{"category":"other","severity":"low","description":"示例中明文使用密码 'password',属于不安全演示,建议在示例中使用占位符或环境变量来避免暴露凭证。","evidence":"CREATE USER admin WITH SUPERUSER PASSWORD 'password';"}],"summary":"内容主要是 PostgreSQL 数据库管理技能的示例。存在潜在的权限提升风险(创建 SUPERUSER 用户和明文密码示例),应避免在公开示例中包含敏感凭证或高权限操作。其他命令(如查询、备份、恢复、性能监控等)在正常教学场景中通常无问题。"}
npx machina-cli add skill chaterm/terminal-skills/postgresql --openclawPostgreSQL 数据库管理
概述
PostgreSQL 数据库管理、扩展使用、查询优化等技能。
连接管理
# 本地连接
psql -U postgres
psql -U username -d database
# 远程连接
psql -h hostname -p 5432 -U username -d database
# 执行 SQL 文件
psql -U username -d database -f script.sql
# 执行单条命令
psql -U username -d database -c "SELECT version();"
psql 常用命令
\l -- 列出数据库
\c dbname -- 切换数据库
\dt -- 列出表
\d tablename -- 表结构
\du -- 列出用户
\dn -- 列出 schema
\df -- 列出函数
\di -- 列出索引
\q -- 退出
\? -- 帮助
\timing -- 显示执行时间
\x -- 扩展显示模式
用户与权限
-- 创建用户
CREATE USER username WITH PASSWORD 'password';
CREATE ROLE username WITH LOGIN PASSWORD 'password';
-- 创建超级用户
CREATE USER admin WITH SUPERUSER PASSWORD 'password';
-- 授权
GRANT ALL PRIVILEGES ON DATABASE dbname TO username;
GRANT SELECT, INSERT, UPDATE ON ALL TABLES IN SCHEMA public TO username;
GRANT USAGE ON SCHEMA schema_name TO username;
-- 设置默认权限
ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT SELECT ON TABLES TO readonly_user;
-- 查看权限
\du username
SELECT * FROM information_schema.role_table_grants WHERE grantee = 'username';
-- 修改密码
ALTER USER username WITH PASSWORD 'newpassword';
数据库操作
-- 创建数据库
CREATE DATABASE dbname;
CREATE DATABASE dbname OWNER username ENCODING 'UTF8';
-- 删除数据库
DROP DATABASE dbname;
-- 查看数据库大小
SELECT pg_database.datname, pg_size_pretty(pg_database_size(pg_database.datname))
FROM pg_database ORDER BY pg_database_size(pg_database.datname) DESC;
-- 查看表大小
SELECT relname, pg_size_pretty(pg_total_relation_size(relid))
FROM pg_catalog.pg_statio_user_tables ORDER BY pg_total_relation_size(relid) DESC;
备份与恢复
pg_dump
# 备份单个数据库
pg_dump -U username dbname > backup.sql
pg_dump -U username -Fc dbname > backup.dump # 自定义格式
# 备份所有数据库
pg_dumpall -U postgres > all_backup.sql
# 只备份结构
pg_dump -U username --schema-only dbname > schema.sql
# 只备份数据
pg_dump -U username --data-only dbname > data.sql
# 备份特定表
pg_dump -U username -t tablename dbname > table.sql
# 并行备份(大数据库)
pg_dump -U username -Fd -j 4 dbname -f backup_dir/
恢复
# 恢复 SQL 格式
psql -U username -d dbname < backup.sql
# 恢复自定义格式
pg_restore -U username -d dbname backup.dump
# 并行恢复
pg_restore -U username -d dbname -j 4 backup_dir/
# 恢复到新数据库
createdb -U postgres newdb
pg_restore -U postgres -d newdb backup.dump
性能监控
-- 当前连接
SELECT * FROM pg_stat_activity;
SELECT pid, usename, application_name, state, query
FROM pg_stat_activity WHERE state != 'idle';
-- 终止连接
SELECT pg_terminate_backend(pid);
-- 锁信息
SELECT * FROM pg_locks WHERE NOT granted;
-- 查看锁等待
SELECT blocked_locks.pid AS blocked_pid,
blocking_locks.pid AS blocking_pid,
blocked_activity.usename AS blocked_user,
blocking_activity.usename AS blocking_user,
blocked_activity.query AS blocked_statement
FROM pg_catalog.pg_locks blocked_locks
JOIN pg_catalog.pg_stat_activity blocked_activity ON blocked_activity.pid = blocked_locks.pid
JOIN pg_catalog.pg_locks blocking_locks ON blocking_locks.locktype = blocked_locks.locktype
JOIN pg_catalog.pg_stat_activity blocking_activity ON blocking_activity.pid = blocking_locks.pid
WHERE NOT blocked_locks.granted;
-- 表统计
SELECT relname, seq_scan, idx_scan, n_tup_ins, n_tup_upd, n_tup_del
FROM pg_stat_user_tables;
-- 索引使用情况
SELECT indexrelname, idx_scan, idx_tup_read, idx_tup_fetch
FROM pg_stat_user_indexes;
查询优化
-- 执行计划
EXPLAIN SELECT * FROM table WHERE condition;
EXPLAIN ANALYZE SELECT * FROM table WHERE condition;
EXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT) SELECT * FROM table;
-- 更新统计信息
ANALYZE tablename;
ANALYZE;
-- 重建索引
REINDEX TABLE tablename;
REINDEX DATABASE dbname;
-- VACUUM
VACUUM tablename;
VACUUM FULL tablename; -- 回收空间
VACUUM ANALYZE tablename; -- 同时更新统计
常见场景
场景 1:主从复制状态
-- 主库
SELECT * FROM pg_stat_replication;
-- 从库
SELECT * FROM pg_stat_wal_receiver;
-- 复制延迟
SELECT EXTRACT(EPOCH FROM (now() - pg_last_xact_replay_timestamp()))::INT AS lag_seconds;
场景 2:慢查询分析
-- 启用 pg_stat_statements
CREATE EXTENSION pg_stat_statements;
-- 查看慢查询
SELECT query, calls, total_time, mean_time, rows
FROM pg_stat_statements
ORDER BY total_time DESC LIMIT 10;
-- 重置统计
SELECT pg_stat_statements_reset();
场景 3:表维护
-- 查看表膨胀
SELECT schemaname, relname, n_dead_tup, n_live_tup,
round(n_dead_tup * 100.0 / nullif(n_live_tup + n_dead_tup, 0), 2) AS dead_ratio
FROM pg_stat_user_tables
WHERE n_dead_tup > 1000
ORDER BY n_dead_tup DESC;
-- 清理膨胀
VACUUM FULL tablename;
故障排查
| 问题 | 排查方法 |
|---|---|
| 连接数过多 | pg_stat_activity, 检查 max_connections |
| 查询慢 | EXPLAIN ANALYZE, 检查索引 |
| 锁等待 | pg_locks, pg_stat_activity |
| 磁盘满 | 检查 WAL、清理旧数据 |
| 复制延迟 | pg_stat_replication |
Source
git clone https://github.com/chaterm/terminal-skills/blob/main/database/postgresql/SKILL.mdView on GitHub Overview
你可以使用 PostgreSQL 的 client(psql)与服务器交互,完成数据库、用户与权限管理、备份/恢复、性能监控与查询优化等日常运维与高级任务。本技能覆盖连接管理、用户与权限、数据库操作、备份与恢复、性能监控、查询优化以及故障排查等场景,帮助你在本地到生产环境中高效维护数据库。
How This Skill Works
你通过 psql 客户端与 PostgreSQL 服务器对话,执行 SQL 命令或 psql 的元命令(如 \\l、\\c 数据库、\\dt、\\d 表名 等)来操作对象、查看元数据与执行诊断。PostgreSQL 提供丰富的系统视图(如 pg_stat_activity、pg_locks、pg_stat_user_tables)用于在运行时观测状态;备份由 pg_dump/pg_restore 支持,性能调优依赖 EXPLAIN ANALYZE、ANALYZE、VACUUM、REINDEX 等工具与命令来获取执行计划、更新统计信息与重建索引。
When to Use It
- 本地开发与初始数据库搭建,快速上手 Postgres 环境
- 用户与权限管理:创建角色、分配权限、设定默认权限
- 数据库备份、恢复与迁移(包含单库、全量备份及特定表备份)
- 性能监控、慢查询分析与索引优化
- 复制与高可用场景的状态检查与故障排查(如主从复制、延迟监控)
Quick Start
- 1) 安装并启动 PostgreSQL,确保 psql 客户端可用。
- 2) 使用 psql 连接到数据库:psql -U username -d database 或 psql -h host -p 5432 -U username -d database。
- 3) 创建数据库/用户并授予权限,示例:CREATE USER alice WITH PASSWORD 'secret'; CREATE DATABASE appdb OWNER alice; GRANT ALL PRIVILEGES ON DATABASE appdb TO alice;
- 4) 运行一个简单查询并查看对象:SELECT version(); \l; \dt;
Best Practices
- 遵循最小权限原则,使用角色与模式来分组并授权,避免直接授予 SUPERUSER;
- 设置并坚持 DEFAULT PRIVILEGES,确保新对象的权限一致性;
- 定期执行 ANALYZE 与 VACUUM,保持统计信息更新和数据膨胀控制;
- 启用并使用 pg_stat_statements 进行慢查询与性能分析;
- 使用 pg_dump/pg_restore 进行备份演练,确保备份可恢复并验证备份完整性;
- 对生产环境开启 WAL 归档与备份验证流程,确保灾难恢复能力;
- 在高并发场景下使用合适的索引与分区策略,避免不必要的全表扫描;
- 对关键 SQL 进行 EXPLAIN ANALYZE 分析,定期审视执行计划与索引使用情况。
Example Use Cases
- 示例 1:日常备份与恢复。使用 pg_dump 备份数据库,并在测试环境使用 pg_restore 验证恢复流程;
- 示例 2:慢查询诊断。启用 pg_stat_statements,定期查询 total_time 最高的语句并优化;
- 示例 3:表膨胀与清理。定期执行 VACUUM ANALYZE 对繁忙表收集统计并回收空间;
- 示例 4:复制延迟监控。通过 pg_stat_replication、pg_last_xact_replay_timestamp 监控主从延迟;
- 示例 5:权限与安全治理。通过 GRANT/REVOKE、ALTER DEFAULT PRIVILEGES 配置长期的最小权限策略与审计。
Frequently Asked Questions
Related Skills
mysql
chaterm/terminal-skills
MySQL 数据库管理与运维
sql-optimization
chaterm/terminal-skills
SQL 优化与调优
redis
chaterm/terminal-skills
Redis 数据库管理
mongodb
chaterm/terminal-skills
MongoDB 数据库管理
Database Design Expert
martinholovsky/claude-skills-generator
Expert in database schema design with focus on normalization, indexing strategies, FTS optimization, and performance-oriented architecture for desktop applications
convex-migrations
waynesutton/convexskills
Schema migration strategies for evolving applications including adding new fields, backfilling data, removing deprecated fields, index migrations, and zero-downtime migration patterns