/
pg-b2
executable file
·49 lines (37 loc) · 1.15 KB
/
pg-b2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#!/bin/bash
# gzips a pg_dump of a table and uploads it to Backblaze B2.
set -e
set -o pipefail
die() {
echo "Fatal: $*" >&2
exit 1
}
_b2() {
if command -v b2 >/dev/null; then
command b2 "$@"
return
fi
if command -v backblaze-b2 >/dev/null; then
command backblaze-b2 "$@"
return
fi
die "Can't find b2 or backblaze-b2 command"
}
if [[ "$#" -lt 2 || "$#" -gt 3 ]]; then
die "Usage: $0 table_name bucket_name [ filename_prefix ]"
fi
TABLE_NAME="${1?}"
BUCKET_NAME="${2?}"
FN_PREFIX="$3"
BASEDIR="${HOME:-/tmp}"
PGB2_SCRATCH_DIR="${PGB2_SCRATCH_DIR:-$BASEDIR/.pgb2_scratch}"
mkdir -p "$PGB2_SCRATCH_DIR" || die "failed to make scratch dir"
DUMPLOC="$(mktemp "${PGB2_SCRATCH_DIR}/pgdump.XXXXXX.gz")" \
|| die "failed to make pgdump file"
# shellcheck disable=SC2064
trap "echo cleaning up '$DUMPLOC'; rm '$DUMPLOC'" EXIT
pg_dump "$TABLE_NAME" | gzip > "$DUMPLOC" || die "failed to dump $TABLE_NAME"
FN="$FN_PREFIX$TABLE_NAME.pgdump.gz"
echo "trying to upload <$DUMPLOC> to <$BUCKET_NAME:$FN>..."
_b2 upload_file "$BUCKET_NAME" "$DUMPLOC" "$FN" \
|| die "failed to upload $DUMPLOC to $BUCKET_NAME:$FN"