You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

76 lines
2.0 KiB

#!/usr/bin/env sh
# Usage:
# postgres_backup.sh [man] //Manual backup, full output
# postgres_backup.sh auto //Auto backup (separate backup location, only outputs STDERR messages)
# CONFIG
### Example Config File ############
###
### PORT=5432
### DIR=/var/lib/pgsql/backup
### COMPRESSION=zstd
### COMP_LEVEL=14
### THREADS=2
###
####################################
#
# Load config file:
source ${HOME}/.postgres_backup.conf
## Check if automated, set appropriate directory
if [ "$1" = "auto" ]; then
AUTO="true"
DIR=${DIR}/auto
else
AUTO="false"
DIR=${DIR}/manual
fi
## Define message command
msg_show() {
[ "$AUTO" = "false" ] && printf "$1"
}
msg_show "Backup directory set to $(tput bold)${DIR}$(tput sgr0)\n"
## Set date for timestamp
DATE=$(date +%Y%m%d-%H%M)
msg_show "Timestamp set to $(tput bold)${DATE}$(tput sgr0)\n"
## Get list of DBs
list_db=$(psql -p${PORT} -U postgres -t -c 'select datname from pg_database;' | grep -v 'template0\|template1\|postgres' | sed '/^$/d')
case $COMPRESSION in
xz)
compress="xz -T${THREADS} -${COMP_LEVEL} -"
comp_ext="xz"
msg_show "Compression set to $(tput bold)${COMPRESSION}$(tput sgr0)\n"
;;
zstd)
compress="zstd -T${THREADS} -${COMP_LEVEL} -z -"
comp_ext="zst"
msg_show "Compression set to $(tput bold)${COMPRESSION}$(tput sgr0)\n"
;;
*)
echo "ERROR 11: Compression not configured correctly!" >&2
exit 11
;;
esac
msg_show "\nStarting backup procedures...\n\n"
## Backup globals
pg_dumpall -p${PORT} -g | eval $compress > ${DIR}/globals_${DATE}.dmp.${comp_ext}
msg_show "Backed up $(tput setaf 2)$(tput bold)globals$(tput sgr0) as $(tput setaf 3)${DIR}/globals_${DATE}.dmp.${comp_ext}$(tput sgr0) using $(tput bold)${compress}$(tput sgr0)\n"
for db in $list_db; do
target="${DIR}/${db}_${DATE}.dmp.${comp_ext}"
pg_dump -O $db | eval $compress > $target
msg_show "Backed up $(tput setaf 2)$(tput bold)${db}$(tput sgr0) as $(tput setaf 3)${target}$(tput sgr0) using $(tput bold)${compress}$(tput sgr0)\n"
done
exit 0