Files
openclaw-config/workspace-sql/sql-helper.sh
T
2026-07-17 15:09:40 +08:00

88 lines
3.4 KiB
Bash
Executable File

#!/bin/bash
# SQL Agent 数据库连接辅助脚本 (via docker exec)
# 用法:
# ./sql-helper.sh psql [SQL] # PostgreSQL 交互/查询
# ./sql-helper.sh mysql [SQL] # MySQL 交互/查询
# ./sql-helper.sh schema-pg # PostgreSQL 所有表
# ./sql-helper.sh schema-mysql # MySQL 所有表
# ./sql-helper.sh analyze-pg # PostgreSQL 索引分析
# ./sql-helper.sh analyze-mysql # MySQL 查询分析
set -euo pipefail
# 密码从 .env 文件通过环境变量传入
# PGPASSWORD 和 MYSQL_PWD_SQL 需在调用前已 export
case "${1:-help}" in
psql)
shift 2>/dev/null || true
if [ $# -ge 1 ]; then
docker exec -e PGPASSWORD="$PGPASSWORD" postgres psql -U openclaw -d openclaw -c "$1" -t 2>&1
else
docker exec -e PGPASSWORD="$PGPASSWORD" -it postgres psql -U openclaw -d openclaw 2>&1
fi
;;
mysql)
shift 2>/dev/null || true
if [ $# -ge 1 ]; then
docker exec mysql mysql -u openclaw -p"$MYSQL_PWD_SQL" openclaw -e "$1" -t 2>&1
else
docker exec -it mysql mysql -u openclaw -p"$MYSQL_PWD_SQL" openclaw 2>&1
fi
;;
schema-pg)
echo "=== PostgreSQL 表列表 ==="
docker exec -e PGPASSWORD="$PGPASSWORD" postgres psql -U openclaw -d openclaw -c "
SELECT table_schema, table_name, table_type
FROM information_schema.tables
WHERE table_schema NOT IN ('pg_catalog','information_schema')
ORDER BY table_schema, table_name;
" -t 2>&1
;;
schema-mysql)
echo "=== MySQL 表列表 ==="
docker exec mysql mysql -u openclaw -p"$MYSQL_PWD_SQL" openclaw -e "
SELECT TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE
FROM information_schema.tables
WHERE TABLE_SCHEMA = 'openclaw'
ORDER BY TABLE_NAME;
" -t 2>&1
;;
analyze-pg)
echo "=== PostgreSQL 索引使用分析 ==="
docker exec -e PGPASSWORD="$PGPASSWORD" postgres psql -U openclaw -d openclaw -c "
SELECT schemaname, tablename, indexname, idx_scan, idx_tup_read, idx_tup_fetch
FROM pg_stat_user_indexes
ORDER BY idx_scan DESC LIMIT 20;
" -t 2>&1
;;
analyze-mysql)
echo "=== MySQL EXPLAIN 经典语句 ==="
docker exec mysql mysql -u openclaw -p"$MYSQL_PWD_SQL" openclaw -e "
SELECT DIGEST_TEXT, COUNT_STAR, SUM_ROWS_EXAMINED, SUM_NO_INDEX_USED
FROM performance_schema.events_statements_summary_by_digest
WHERE SUM_NO_INDEX_USED > 0
ORDER BY COUNT_STAR DESC LIMIT 10;
" -t 2>&1 || echo "performance_schema 可能需要额外配置"
;;
test)
echo "=== PostgreSQL 连接测试 ==="
docker exec -e PGPASSWORD="$PGPASSWORD" postgres psql -U openclaw -d openclaw -c "SELECT current_database() AS db, version();" -t 2>&1
echo ""
echo "=== MySQL 连接测试 ==="
docker exec mysql mysql -u openclaw -p"$MYSQL_PWD_SQL" openclaw -e "SELECT database() AS db, version();" -t 2>&1
;;
*)
echo "SQL Agent 数据库辅助脚本 (via docker exec)"
echo ""
echo "用法:"
echo " ./sql-helper.sh psql [SQL] # PostgreSQL 交互/查询"
echo " ./sql-helper.sh mysql [SQL] # MySQL 交互/查询"
echo " ./sql-helper.sh schema-pg # PostgreSQL 所有表"
echo " ./sql-helper.sh schema-mysql # MySQL 所有表"
echo " ./sql-helper.sh analyze-pg # PostgreSQL 索引分析"
echo " ./sql-helper.sh analyze-mysql # MySQL 查询分析"
echo " ./sql-helper.sh test # 测试连接"
;;
esac