mirror of
https://github.com/roles-ansible/role-postgresql-backup.git
synced 2024-08-16 10:19:49 +02:00
55 lines
1 KiB
Bash
55 lines
1 KiB
Bash
|
#!/usr/bin/env bash
|
||
|
# this file is managed by ansible!
|
||
|
|
||
|
set -o pipefail
|
||
|
|
||
|
|
||
|
BACKUP_DIR_BASE="{{ postgresql_backup.backup_dir | default( '/var/backup/postgresql/' ) }}"
|
||
|
DATE_FORMAT="{{ postgresql_backup.date_format | default( '%Y-%m-%d_%H-%M' ) }}"
|
||
|
PG_HOSTNAME
|
||
|
PG_USERNAME
|
||
|
PG_PORT
|
||
|
PG_DATABASE
|
||
|
|
||
|
create_backup_dir() {
|
||
|
local backup_dir="${BACKUP_DIR_BASE%/}/$(date "+$DATE_FORMAT")"
|
||
|
mkdir -p "$backup_dir"
|
||
|
echo "$backup_dir"
|
||
|
}
|
||
|
|
||
|
|
||
|
backup_databases() {
|
||
|
local filename="${PG_DATABASE}.psql"
|
||
|
if (umask 077 && pg_dump -F c -h "$PG_HOSTNAME" -U "$PG_USERNAME" -p "$PG_PORT" "$PG_DATABASE" -f "${filename}.in_progress"); then
|
||
|
mv "${filename}.in_progress" "$filename"
|
||
|
else
|
||
|
return 1
|
||
|
fi;
|
||
|
done <<< "$databases"
|
||
|
return 0
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
main() {
|
||
|
backup_dir="$(create_backup_dir)"
|
||
|
echo "Created backup directory \"${backup_dir}\"."
|
||
|
|
||
|
pushd . >/dev/null
|
||
|
cd "$backup_dir"
|
||
|
|
||
|
echo "Starting databases backup."
|
||
|
if backup_databases; then
|
||
|
echo "Databases backup is done."
|
||
|
else
|
||
|
echo "Databases backup failed. Exiting."
|
||
|
exit 1;
|
||
|
fi;
|
||
|
|
||
|
popd >/dev/null
|
||
|
}
|
||
|
|
||
|
|
||
|
main
|