postgres统计指定数据库+指定表+指定时间段 新增条数 脚本

#!/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"

Tags: none

添加新评论