RUTHER
RUTHER

Reputation: 43

How to check Postgres backup has been successful(Without manual efforts)?

We have 100+ databases contains daily backups

how to check failure backups in PostgreSQL backup schedules

pg_dump -h localhost -p 5432  -U postgres -d db1  -v -f "path/file.backup"
pg_dump -h localhost -p 5432  -U postgres -d db2  -v -f "path/file.backup"
pg_dump -h localhost -p 5432  -U postgres -d db3  -v -f "path/file.backup"
pg_dump -h localhost -p 5432  -U postgres -d db4  -v -f "path/file.backup"
pg_dump -h localhost -p 5432  -U postgres -d db5  -v -f "path/file.backup"
...

like this i have 100 backup schedules

Upvotes: 2

Views: 2546

Answers (1)

sergei
sergei

Reputation: 422

Try to do it in for loop for example?

#!/bin/bash

# create an indexed array with all your databases listed
database_names=( "1" "2" "3" )

# Declare an associative array to store dbname and dump status codes
declare -A all_dbdump_states

for db in "${database_names[@]}"; do
   echo "Executing $db dump.."
   pg_dump -h localhost -p 5432 -U postgres -d $db -v -f "path/file.backup"
   dump_rc=$? # Save exit code of pg_dump process into variable

   # After each for loop iteration, append data into array
   all_dbdump_states[$db]+=$dump_rc
done

echo -e "\nListing status codes of all dumps:"
for db in "${!all_dbdump_states[@]}"; do
   echo "Database [$db] status: ${all_dbdump_states[$db]}"
   sleep 1
done           

Here I'm echoing these pg_dump lines for better tests and made an explicit mistake in echo command to put second command fail, with exit code 127:

#!/bin/bash

# create an indexed array with all your databases listed
database_names=( "1" "2" "3" )

# Declare an assotiative array to store dbname and dump status codes
declare -A all_dbdump_states

for db in "${database_names[@]}"; do
   echo "Executing $db dump.."
   if [[ $db -eq 2 ]]; then
      ech "pg_dump -h localhost -p 5432 -U postgres -d 2 -v -f 'path/file.backup'" &>/dev/null
      dump_rc=$? # Save exit code of pg_dump process into variable
      all_dbdump_states[$db]+=$dump_rc
      continue
   fi
   echo "pg_dump -h localhost -p 5432 -U postgres -d $db -v -f 'path/file.backup'" &>/dev/null
   dump_rc=$? # Save exit code of pg_dump process into variable

   # After each for loop iteration, append data into array
   all_dbdump_states[$db]+=$dump_rc
done

echo -e "\nListing status codes of all dumps:"
for db in "${!all_dbdump_states[@]}"; do
   echo "Database [$db] status: ${all_dbdump_states[$db]}"
   sleep 1
done

Sample output:

$ ./test.sh
Executing 1 dump..
Executing 2 dump..
Executing 3 dump..

Listing status codes of all dumps:
Database [1] status: 0
Database [2] status: 127
Database [3] status: 0

Upvotes: 2

Related Questions