#!/bin/bash restoreDir=/etc/restore pgsqlDir="$restoreDir/postgresql" scriptDir="$(dirname "$0")" function readConfig() { local $config if [[ -r "${scriptDir}/../config/postgresql.cfg" ]]; then config="$(readlink -f "${scriptDir}/../config/postgresql.cfg")" else exit 2 fi while read -r -a vals do [[ "${vals[*]}" =~ ^#.*$ ]] && continue [[ -z "${vals[0]}" ]] && continue if [[ "${vals[0]}" -ge 10 ]]; then echo "${vals[@]}" fi done < "$config" } function runBackups() { local vals local version local cluster while read -r -a vals do version="${vals[0]}" cluster="${vals[1]}" echo "Backing up PostgreSQL $version - $cluster" pg_backupcluster "$version" "$cluster" createdirectory || return $? sudo -u postgres pg_backupcluster "$version" "$cluster" basebackup || return $? sudo -u postgres pg_backupcluster "$version" "$cluster" dump || return $? sudo -u postgres pg_backupcluster "$version" "$cluster" expirebasebackups 1 || return $? sudo -u postgres pg_backupcluster "$version" "$cluster" expiredumps 1 || return $? done < <(readConfig) } hook_before() { if [[ -d "$pgsqlDir" ]]; then rm -rf "$pgsqlDir" || exit 1 fi runBackups || exit $? } hook_after() { rm -rf "$pgsqlDir" || exit 1 } hook_fail() { : } hook_final() { : } case "$1" in before) hook_before || exit $? ;; after) hook_after || exit $? ;; fail) hook_fail || exit $? ;; finally) hook_final || exit $? ;; esac