#!/bin/bash
# 统计 a001~a004 中 table_name 表当月新增总数,并逐库写入结果文件
# ===== 配置区 =====
DBS=("a001" "a002" "a003" "a004") # 要统计的数据库
PGHOST="127.0.0.1"
PGPORT="5432"
PGUSER="postgres"
export PGPASSWORD="your_password"
OUT_DIR="/tmp/table_count" # 结果输出目录
SUMMARY_FILE="${OUT_DIR}/summary.txt" # 汇总文件
RESULT_FILE="${OUT_DIR}/result_detail.txt" # 明细汇总文件(数据库名+数量)
# 时间字段名(如为 create_time 请修改)
TIME_COL="create_time"
# ===== 初始化 =====
mkdir -p "$OUT_DIR"
TOTAL=0
# 清空/初始化文件
: > "$SUMMARY_FILE"
: > "$RESULT_FILE"
# 写入标题行
echo "数据库名,当月新增数" >> "$RESULT_FILE"
# ===== 循环统计 =====
for DB in "${DBS[@]}"; do
# 查询当月新增数 如为时间戳则自行修改
CNT=$(psql -h "$PGHOST" -p "$PGPORT" -U "$PGUSER" -d "$DB" -t -A -c "
SELECT COUNT(*) FROM table_name
WHERE ${TIME_COL} >= date_trunc('month', CURRENT_DATE)
AND ${TIME_COL} < date_trunc('month', CURRENT_DATE) + INTERVAL '1 month';
")
CNT=$(echo "$CNT" | tr -d '[:space:]') # 去空白
[ -z "$CNT" ] && CNT=0 # 防空值
# 1) 每个库单独一个文件:<数据库名>.txt
echo "数据库名: $DB" > "${OUT_DIR}/${DB}.txt"
echo "当月新增数: $CNT" >> "${OUT_DIR}/${DB}.txt"
# 2) 明细汇总文件追加一行:数据库名,数量
echo "${DB},${CNT}" >> "$RESULT_FILE"
# 3) 控制台打印
echo "数据库 $DB 当月新增: $CNT"
# 4) 累加总数
TOTAL=$((TOTAL + CNT))
done
# ===== 写入汇总 =====
{
echo "=============================="
echo "统计时间: $(date '+%Y-%m-%d %H:%M:%S')"
echo "统计范围: 当前月份"
echo "=============================="
echo "各库明细:"
cat "$RESULT_FILE"
echo "=============================="
echo "四库当月新增总数: $TOTAL"
} | tee -a "$SUMMARY_FILE"
echo ""
echo "结果文件已生成:"
echo " - 汇总文件: $SUMMARY_FILE"
echo " - 明细文件: $RESULT_FILE"
echo " - 各库单独文件: ${OUT_DIR}/a001.txt, a002.txt, a003.txt, a004.txt"