【原创脚本分享】一键格式化pgbackrest info的备份输出结果为表格形式

脚本内容

 1cat > pgbackrest_table.sh <<"EOF"
2#!/bin/bash
3
4# 获取 pgBackRest 信息并解析 JSON
5pgbackrest info --stanza=$1 --output=json | jq -r '
6[
7    "Label", "Type", "Start Timestamp", "Stop Timestamp", "DB Size", "DB bk Size", "Repo bks_all Size", "Repo bks Size", "Start LSN", "Stop LSN", "Archive Start", "Archive Stop", "Reference"
8],
9(
10    .[0].backup[] | [
11        .label,
12        .type,
13        .timestamp.start,
14        .timestamp.stop,
15        .info.size,
16        .info.delta,
17        .info.repository.size,
18        .info.repository.delta,
19        .lsn.start,
20        .lsn.stop,
21        .archive.start,
22        .archive.stop,
23        (if .reference then (.reference | join("
")) else "" end) # 处理可能为空的 reference 数组
24    ]
25) | @tsv' | while IFS=$'\t' read -r label type start_ts stop_ts size delta repo_size repo_delta start_lsn stop_lsn archive_start archive_stop reference; do
26    # 检查是否是标题行
27    if [[ "
$label" == "Label" ]]; then
28    printf "
|------------------------------------------|--------|---------------------|---------------------|------------|------------|----------------------|----------------------|------------------|------------------|--------------------------|--------------------------|------------------------------------------------------------------------------------------------------|\n"
29        printf "| %-40s | %-6s | %-19s | %-19s | %-10s | %-10s | %-20s | %-20s | %-16s | %-16s | %-24s | %-24s | %-100s |\n" \
30               "$label" "$type" "$start_ts" "$stop_ts" "$size" "$delta" "$repo_size" "$repo_delta" "$start_lsn" "$stop_lsn" "$archive_start" "$archive_stop" "$reference"
31        # 输出分隔行
32        printf "|------------------------------------------|--------|---------------------|---------------------|------------|------------|----------------------|----------------------|------------------|------------------|--------------------------|--------------------------|------------------------------------------------------------------------------------------------------|\n"
33        continue
34    fi
35
36    # 使用 numfmt 格式化大小到 MB 或 GB
37    size=$(numfmt --to=iec --suffix=B "$size")
38    delta=$(numfmt --to=iec --suffix=B "$delta")
39    repo_size=$(numfmt --to=iec --suffix=B "$repo_size")
40    repo_delta=$(numfmt --to=iec --suffix=B "$repo_delta")
41
42    # 东八区
43    start_ts=$(TZ='Asia/Shanghai' date -d @"$start_ts" +"%Y-%m-%d %H:%M:%S")
44    stop_ts=$(TZ='Asia/Shanghai' date -d @"$stop_ts" +"%Y-%m-%d %H:%M:%S")
45
46    # 打印格式化的内容,并在每列前后加竖线
47    printf "| %-40s | %-6s | %-19s | %-19s | %-10s | %-10s | %-20s | %-20s | %-16s | %-16s | %-15s | %-15s | %-100s |\n" \
48           "$label" "$type" "$start_ts" "$stop_ts" "$size" "$delta" "$repo_size" "$repo_delta" "$start_lsn" "$stop_lsn" "$archive_start" "$archive_stop" "$reference"
49done
50printf "|------------------------------------------|--------|---------------------|---------------------|------------|------------|----------------------|----------------------|------------------|------------------|--------------------------|--------------------------|------------------------------------------------------------------------------------------------------|\n"
51echo "  "
52
53EOF
54
55
56cp  pgbackrest_table.sh  /usr/local/bin/    
57chmod +x pgbackrest_table.sh

示例

 1[pg15@pg15 ~]$ sh pgbackrest_table.sh pg16
2|------------------------------------------|--------|---------------------|---------------------|------------|------------|----------------------|----------------------|------------------|------------------|--------------------------|--------------------------|------------------------------------------------------------------------------------------------------|
3| Label                                    | Type   | Start Timestamp     | Stop Timestamp      | DB Size    | DB bk Size | Repo bks_all Size    | Repo bks Size        | Start LSN        | Stop LSN         | Archive Start            | Archive Stop             | Reference                                                                                            |
4|------------------------------------------|--------|---------------------|---------------------|------------|------------|----------------------|----------------------|------------------|------------------|--------------------------|--------------------------|------------------------------------------------------------------------------------------------------|
5| 20241030-093035F                         | full   | 2024-10-30 09:30:35 | 2024-10-30 09:30:53 | 588MB      | 588MB      | 180MB                | 180MB                | 1/D5000028       | 1/D5000138       | 0000000300000001000000D5 | 0000000300000001000000D5 |                                                                                                      |
6| 20241030-093114F                         | full   | 2024-10-30 09:31:14 | 2024-10-30 09:31:32 | 588MB      | 588MB      | 180MB                | 180MB                | 1/D7000028       | 1/D7000138       | 0000000300000001000000D7 | 0000000300000001000000D7 |                                                                                                      |
7| 20241030-093114F_20241030-093150D        | diff   | 2024-10-30 09:31:50 | 2024-10-30 09:31:51 | 588MB      | 9.5KB      | 180MB                | 798B                 | 1/D9000028       | 1/D9000100       | 0000000300000001000000D9 | 0000000300000001000000D9 | 20241030-093114F                                                                                     |
8| 20241030-093114F_20241030-093316I        | incr   | 2024-10-30 09:33:16 | 2024-10-30 09:33:18 | 588MB      | 9.9KB      | 180MB                | 834B                 | 1/DB000028       | 1/DB000100       | 0000000300000001000000DB | 0000000300000001000000DB | 20241030-093114F, 20241030-093114F_20241030-093150D                                                  |
9| 20241030-093114F_20241030-093321I        | incr   | 2024-10-30 09:33:21 | 2024-10-30 09:33:23 | 588MB      | 11KB       | 180MB                | 862B                 | 1/DD000028       | 1/DD000100       | 0000000300000001000000DD | 0000000300000001000000DD | 20241030-093114F, 20241030-093114F_20241030-093150D, 20241030-093114F_20241030-093316I               |
10| 20241030-093114F_20241030-093334D        | diff   | 2024-10-30 09:33:34 | 2024-10-30 09:33:36 | 588MB      | 11KB       | 180MB                | 998B                 | 1/DE000028       | 1/DF000050       | 0000000300000001000000DE | 0000000300000001000000DF | 20241030-093114F                                                                                     |
11| 20241030-093114F_20241030-101302D        | diff   | 2024-10-30 10:13:02 | 2024-10-30 10:13:23 | 692MB      | 588MB      | 213MB                | 198MB                | 1/E9000028       | 1/E9000138       | 0000000300000001000000E9 | 0000000300000001000000E9 | 20241030-093114F                                                                                     |
12| 20241030-093114F_20241030-101438D        | diff   | 2024-10-30 10:14:38 | 2024-10-30 10:14:59 | 692MB      | 588MB      | 213MB                | 198MB                | 1/EB000028       | 1/EB000138       | 0000000300000001000000EB | 0000000300000001000000EB | 20241030-093114F                                                                                     |
13| 20241030-093114F_20241030-101913I        | incr   | 2024-10-30 10:19:13 | 2024-10-30 10:19:15 | 692MB      | 13KB       | 213MB                | 1.3KB                | 1/ED000028       | 1/ED000138       | 0000000300000001000000ED | 0000000300000001000000ED | 20241030-093114F, 20241030-093114F_20241030-101438D                                                  |
14|------------------------------------------|--------|---------------------|---------------------|------------|------------|----------------------|----------------------|------------------|------------------|--------------------------|--------------------------|------------------------------------------------------------------------------------------------------|

说明:

  • “database size”:是数据库的完整未压缩大小

  • “database backup size”是要实际备份的数据库中的数据量(对于完全备份,这两个值将相同)。

  • “backup set size”包括此备份中的所有文件以及存储库中所需的任何引用备份,以从此备份恢复数据库

  • “backup size”仅包括此备份中的文件(对于完全备份,这两个值也将相同)。如果在 pgBackRest 中启用了压缩,则存储库大小反映压缩后的文件大小。



请使用浏览器的分享功能分享到微信等