mirror of https://github.com/pditzel/dbb.git

Patrick Ditzel
18.46.2017 697aafe6b441d26eba9a63ff43ec777d704ad435
dbb-modules/postgresql
@@ -6,10 +6,6 @@
   if [ ! -e /usr/bin/pg_dump ]; then
      debug "It seems that you dont have psql installed. You may have problems to backup remote databases"
   fi
   numberRegex='^[0-9]+$'
   if ! [[ $(id -u postgres 2>&1) =~ $numberRegex ]] ; then
      debug "It seems that you dont have the user postgres on your computer. You may have problems to backup local postgres databases"
   fi
   if [ -r ~/.pgpass ]; then
      debug "function check-postgresql-deps: ~/.pgpass exists, doing reomte backup."
   else
@@ -18,55 +14,6 @@
   fi
}
# PostgreSQL local
function pg_local_all {
   # Debugoutput id DEBUG is enabled
   debug "Dump all from Postgres local"
   # Dump all databases in one file as user postgres (Debian)
   sudo -H -i -u postgres pg_dumpall > "$TMP_DIR"/local_dumpall.pgsql
   debug "Diff alldumps from Postgres local"
   # Check if there are differences between the actual dump and the last dump
   backup_file_handler "$TMP_DIR $BACKUP_DIR" local_dumpall.pgsql
}
function pg_local_single {
   # Get a list with all databases on localhost. Do it as user postgres (Debian)
   # parallelize the following
   for DB in $(sudo -H -i -u postgres /usr/bin/psql -At -c "SELECT datname FROM pg_database WHERE NOT datistemplate AND datallowconn ORDER BY datname;" postgres)
      do
         debug "Dumping local database $DB"
         # Dump each database in a single file
         sudo -H -i -u postgres /usr/bin/pg_dump -Fp "$DB" > "$TMP_DIR"/local_"$DB".pgsql
         backup_file_handler "$TMP_DIR" "$BACKUP_DIR" local_"$DB".pgsql
         echo ""
      done
}
# Do the local backupjobs
function run_local_pg_backups {
   # Test if the current backupuser has access via sudo to postgres
   # This part has to be improved!
   sudo -l -U "$BACKUPUSER" | grep postgres
   if [ $? -eq 0 ];then
      # If the user has access vi sudo to postgres and a full dump is configured, do it.
      if [ "$POSTGRES_BACKUP_LOCAL_DUMP_ALL" == "TRUE" ]; then
         pg_local_all
      fi
      # If the user has access vi sudo to postgres and dumps for each database is configured , do it.
      if [ "$POSTGRES_BACKUP_LOCAL_SINGLE" == "TRUE" ]; then
         pg_local_single
      fi
   else
      # If the user is not permitted to acces the postgresdatabases vi sudo throw an errormessage
      echo "" | $LOGGER
      echo "The backupuser does not the permission to act as user postgres" | $LOGGER
      echo "Please add the following line to your /etc/sudoers:" | $LOGGER
      echo "backupuser ALL=(postgres) NOPASSWD:/usr/bin/psql,/usr/bin/pg_dump,/usr/bin/pg_dumpall" | $LOGGER
      echo "" | $LOGGER
   fi
}
################################################################################
@@ -96,8 +43,8 @@
      # I don't know if the following statement really effect to pg_dump :-(
      export PGSSLMODE=require
      # Dump the databases which are defined in the params
      /usr/bin/pg_dump -U "$TRGTBDUSER" -h "$TRGTHOST" -p "$TRGTPORT" "$TRGTDB" > "$TMP_DIR"/"$TRGTHOST"-"$TRGTDB".pgql
      backup_file_handler "$TMP_DIR" "$BACKUP_DIR" "$TRGTHOST"-"$TRGTDB".pgql
      /usr/bin/pg_dump -U "$TRGTBDUSER" -h "$TRGTHOST" -p "$TRGTPORT" "$TRGTDB" > "$TMP_DIR"/"$TRGTHOST"_"$TRGTDB".pgql
      backup_file_handler "$TMP_DIR" "$BACKUP_DIR" "$TRGTHOST"_"$TRGTDB".pgql
   else
      # If no encrypted connection to the postgres-server can be established throw an errormessage
      echo "" | $LOGGER
@@ -118,10 +65,11 @@
            # For each entry do the backup
            debug "run dump with params $LINE"
            # CAUTION: No doublequotes in the following line. The var $LINE has to be splittet!
           dump_remote_pgdb $LINE
         # To get the params for the function the .pgpass-file is striped from the comments,
         # the ":" are replaces against whitespaces and only the first four coloums are used
         # so we give "host port database user" to the function
            # DO NOT DOUBLEQUOTE $LINE
               dump_remote_pgdb $LINE
            # To get the params for the function the .pgpass-file is striped from the comments,
            # the ":" are replaces against whitespaces and only the first four coloums are used
            # so we give "host port database user" to the function
         done <<< "$(cat ~/.pgpass | grep -v '#' | tr ":" " " | cut -d " " -f1,2,3,4)"
      else
         # If the ~/.pgpass-file is missig, throw an errormessage
@@ -135,9 +83,6 @@
}
function postgresql-main {
   if [ "$POSTGRES_BACKUP_LOCAL" = "TRUE" ]; then
      run_local_pg_backups
   fi
   if [ "$POSTGRES_BACKUP_REMOTE" = "TRUE" ]; then
      run_remote_pg_backups
   fi