PostgreSQL 数据库操作
by callxor
安装
claude skill add --url https://github.com/openclaw/skills文档
何时使用
✅ 使用此技能当:
- 查询数据库表结构、字段、索引
- 执行 SELECT/INSERT/UPDATE/DELETE 操作
- 创建/修改/删除表结构
- 数据库备份与恢复
- pgvector 向量相似度搜索
- 查看连接状态、锁、性能指标
- 导出/导入数据(CSV/SQL)
❌ 不使用此技能当:
- 需要图形界面操作 → 推荐 DBeaver/pgAdmin
- 复杂 ORM 操作 → 使用 SQLAlchemy/Prisma
- 数据库集群管理 → 使用 Patroni/pgBouncer
数据库配置模板
连接信息存储在 TOOLS.md 或环境变量,不要硬编码密码。
### PostgreSQL 数据库
| 项目 | 值 |
|------|-----|
| 主机 | your-db-host.example.com |
| 端口 | 5432 |
| 数据库 | your_database |
| 用户 | your_user |
| 密码 | $DB_PASSWORD (环境变量) |
基础命令
连接数据库
# 方式 1: 命令行参数
PGPASSWORD='密码' psql -h 主机 -p 端口 -U 用户 -d 数据库
# 方式 2: 环境变量(推荐)
export PGHOST=主机
export PGPORT=5432
export PGDATABASE=数据库
export PGUSER=用户
export PGPASSWORD=密码
psql
# 方式 3: .pgpass 文件(最安全)
echo "主机:端口:数据库:用户:密码" >> ~/.pgpass
chmod 600 ~/.pgpass
psql -h 主机 -U 用户 -d 数据库
查询表结构
# 列出所有表
\dt
# 列出所有表(含 schema)
\dt+
# 查看表结构
\d tablename
# 查看表详细结构(含索引、约束)
\d+ tablename
# 查看所有字段类型
SELECT column_name, data_type, is_nullable
FROM information_schema.columns
WHERE table_name = 'tablename';
基础 CRUD
# 查询
SELECT * FROM 表名 WHERE 条件 LIMIT 10;
# 插入
INSERT INTO 表名 (字段 1, 字段 2) VALUES (值 1, 值 2);
# 更新
UPDATE 表名 SET 字段=新值 WHERE 条件;
# 删除
DELETE FROM 表名 WHERE 条件;
# 计数
SELECT COUNT(*) FROM 表名;
高级操作
导出/导入
# 导出为 CSV
psql -h 主机 -U 用户 -d 数据库 -c "COPY (SELECT * FROM 表名) TO STDOUT WITH CSV HEADER" > 输出.csv
# 导出整个表
pg_dump -h 主机 -U 用户 -t 表名 数据库 > 表名.sql
# 导入 SQL
psql -h 主机 -U 用户 -d 数据库 < 输入.sql
# 导入 CSV
\copy 表名 FROM '输入.csv' WITH CSV HEADER;
备份/恢复
# 完整备份
pg_dump -h 主机 -U 用户 数据库 > 备份.sql
# 压缩备份
pg_dump -h 主机 -U 用户 数据库 | gzip > 备份.sql.gz
# 恢复
psql -h 主机 -U 用户 -d 数据库 < 备份.sql
# 恢复压缩
gunzip -c 备份.sql.gz | psql -h 主机 -U 用户 -d 数据库
pgvector 向量查询
# 向量相似度搜索(余弦距离)
SELECT *, embedding <-> '[0.1, 0.2, ...]'::vector AS distance
FROM your_table
ORDER BY distance
LIMIT 10;
# 余弦相似度
SELECT *, 1 - (embedding <=> '[0.1, 0.2, ...]'::vector) AS similarity
FROM your_table
WHERE 1 - (embedding <=> '[0.1, 0.2, ...]'::vector) > 0.8
ORDER BY similarity DESC;
# 查看向量维度
SELECT vector_dims(embedding) FROM your_table LIMIT 1;
性能监控
# 当前连接
SELECT pid, usename, client_addr, query, state, query_start
FROM pg_stat_activity WHERE datname = current_database();
# 锁信息
SELECT * FROM pg_locks WHERE NOT granted;
# 慢查询(需要 pg_stat_statements)
SELECT query, calls, total_exec_time, mean_exec_time
FROM pg_stat_statements ORDER BY mean_exec_time DESC LIMIT 10;
# 表大小
SELECT relname AS table,
pg_size_pretty(pg_total_relation_size(relid)) AS total
FROM pg_catalog.pg_statio_user_tables
ORDER BY pg_total_relation_size(relid) DESC;
安全实践
密码管理
- ✅ 推荐: 使用
~/.pgpass文件存储密码 - ✅ 推荐: 使用环境变量
$PGPASSWORD - ✅ 推荐: 使用
.env文件 +dotenv加载 - ❌ 避免: 在脚本中硬编码密码
- ❌ 避免: 在日志中暴露密码
权限控制
# 查看用户权限
\du
# 创建只读用户
CREATE USER reader WITH PASSWORD '密码';
GRANT CONNECT ON DATABASE 数据库 TO reader;
GRANT USAGE ON SCHEMA public TO reader;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO reader;
# 撤销权限
REVOKE ALL ON TABLE 敏感表 FROM reader;
审计日志
# 开启查询日志(postgresql.conf)
log_statement = 'all' # 或 'mod' / 'ddl'
log_duration = on
log_min_duration_statement = 1000 # 记录>1s 的查询
脚本示例
批量查询脚本
#!/bin/bash
# scripts/query.sh
source .env
psql -h $DB_HOST -U $DB_USER -d $DB_NAME -c "$1"
自动备份脚本
#!/bin/bash
# scripts/backup.sh
source .env
DATE=$(date +%Y%m%d_%H%M%S)
pg_dump -h $DB_HOST -U $DB_USER $DB_NAME | gzip > backups/${DB_NAME}_${DATE}.sql.gz
find backups/ -mtime +7 -delete # 保留 7 天
故障排查
连接失败
# 检查网络
telnet 主机 5432
# 检查 pg_hba.conf
# 确保允许你的 IP 连接
# 检查防火墙
sudo ufw status | grep 5432
权限错误
# 查看当前用户
SELECT current_user;
# 查看表所有者
SELECT tablename, tableowner FROM pg_tables WHERE schemaname = 'public';
性能问题
# 分析表(更新统计信息)
ANALYZE 表名;
# 重建索引
REINDEX TABLE 表名;
# 清理死元组
VACUUM 表名;
VACUUM FULL 表名; # 锁表,谨慎使用
参考资料
相关 Skills
数据库建模
by alirezarezvani
把需求梳理成关系型数据库表结构,自动生成迁移脚本、TypeScript/Python 类型、种子数据、RLS 策略和索引方案,适合多租户、审计追踪、软删除等后端建模与 Schema 评审场景。
✎ 把数据库结构设计、ER图梳理和SQL建模放到一处,复杂业务也能快速统一数据模式,少走不少返工弯路。
资深数据科学家
by alirezarezvani
覆盖实验设计、特征工程、预测建模、因果推断与模型评估,适合用 Python/R/SQL 做 A/B 测试、时序分析和生产级 ML 落地,支撑数据驱动决策。
✎ 从 A/B 测试、因果分析到预测建模一条龙搞定,既有硬核统计方法也懂业务沟通,特别适合把数据结论真正落地。
数据库设计
by alirezarezvani
聚焦数据库 Schema 设计与演进,自动检查规范化、数据类型、约束和索引问题,生成 ERD,并为零停机迁移、数据变更和回滚提供可执行方案。
✎ 专注数据库设计与数据建模,帮你快速理清表结构和关系,减少后期返工,SQL 落地也更顺手。
相关 MCP 服务
PostgreSQL 数据库
编辑精选by Anthropic
PostgreSQL 是让 Claude 直接查询和管理你的数据库的 MCP 服务器。
✎ 这个服务器解决了开发者需要手动编写 SQL 查询的痛点,特别适合数据分析师或后端开发者快速探索数据库结构。不过,由于是参考实现,生产环境使用前务必评估安全风险,别指望它能处理复杂事务。
SQLite 数据库
编辑精选by Anthropic
SQLite 是让 AI 直接查询本地数据库进行数据分析的 MCP 服务器。
✎ 这个服务器解决了 AI 无法直接访问 SQLite 数据库的问题,适合需要快速分析本地数据集的开发者。不过,作为参考实现,它可能缺乏生产级的安全特性,建议在受控环境中使用。
Firecrawl 智能爬虫
编辑精选by Firecrawl
Firecrawl 是让 AI 直接抓取网页并提取结构化数据的 MCP 服务器。
✎ 它解决了手动写爬虫的麻烦,让 Claude 能直接访问动态网页内容。最适合需要实时数据的研究者或开发者,比如监控竞品价格或抓取新闻。但要注意,它依赖第三方 API,可能涉及隐私和成本问题。