Skip to content
Snippets Groups Projects
Select Git revision
  • 79114c3f3c352753b7cffaf61b02f22e8e91f058
  • master default protected
  • simple-task/7248-eol-check-add-node-22
  • 6877_check_iml_deployment
4 results

check_clientbackup

Blame
  • pgsql.sh 3.29 KiB
    #!/bin/bash
    # ================================================================================
    #
    # LOCALDUMP :: POSTGRES
    # create gzipped plain text backups from each scheme
    #
    # --------------------------------------------------------------------------------
    # ah - Axel Hahn <axel.hahn@iml.unibe.ch>
    # ds - Daniel Schueler <daniel.schueler@iml.unibe.ch>
    #
    # 2016-11-10  ah,ds  v1.0
    # 2017-03-29  .....  v1.1  added restore
    # 2022-01-20         v1.2  fixes with shellcheck
    # ================================================================================
    
    if [ -z "$BACKUP_TARGETDIR" ]; then
      echo "ERROR: you cannot start $(basename $0) directly"
      rc=$rc+1
      exit 1
    fi
    
    # --------------------------------------------------------------------------------
    # CONFIG
    # --------------------------------------------------------------------------------
    
      # unix user of postgres database
      PGUSER=postgres
    
    
    # --------------------------------------------------------------------------------
    # FUNCTION
    # --------------------------------------------------------------------------------
    
    function doPgsqlBackup(){
    
      create_targetdir
    
      # ----- change owner of directory because of su command
      chown ${PGUSER}. "${BACKUP_TARGETDIR}"
    
      # ----- GO
    
      sSqlGetDblist="select datname from pg_database where not datistemplate and datallowconn order by datname;"
      for DATABASE in $(su ${PGUSER} -c "psql -At -c '$sSqlGetDblist' postgres" 2>/dev/null)
      do
        echo "----- $DATABASE"
        echo -n "backup ... "
        OUTFILE="${BACKUP_TARGETDIR}/$(get_outfile ${DATABASE}).sql"
        su ${PGUSER} -c "pg_dump -Fp ${DATABASE} >$OUTFILE"
        fetchrc
    
        if [ $myrc -eq 0 ]; then
          echo -n "compress ... "
          compress_file "$OUTFILE"
        else
          color error
          echo "ERROR occured - no gzip"
          color reset
          # mv $OUTFILE $OUTFILE
        fi
        ls -l "$OUTFILE"*
      echo
      done
    }
    
    
    # restore database dump file into database
    # param  string  database dump file (gzipped)
    # param  string  optional: database to import; default: database is parsed from file
    function restoreByFile(){
      sMyfile=$1
      sMyDb=$2
    
      if [ -z "$sMyDb" ]; then
        h2 "analyze dump $sMyfile"
        sMyDb="$(guessDB "$sMyfile" )"
        echo "detected db schema from file: [${sMyDb}]"
      else
        echo "db schema from param 2: [${sMyDb}]"
      fi
    
      echo
    
      echo import to "$sMyDb"...
    
      h2 "deleting database [$sMyDb] ..."
      color cmd
      su ${PGUSER} -c "dropdb ${sMyDb}"
      color reset
    
      h2 "ensure that database exists ..."
      color cmd
      su ${PGUSER} -c "psql -c \"CREATE DATABASE ${sMyDb};\""
      fetchrc
      color reset
    
      h2 "import ..."
      ls -l "${sMyfile}"
      echo "import to database [${sMyDb}]"
      color cmd
      zcat "${sMyfile}" | su ${PGUSER} -c "psql -d ${sMyDb}"
      fetchrc
      color reset
    
    }
    
    
    # --------------------------------------------------------------------------------
    # MAIN
    # --------------------------------------------------------------------------------
    
      # ----- requirements
      j_requireBinary "pg_dump"   1
      j_requireProcess "postgres|postmaster" 1
    
      if [ $rc -ne 0 ]; then
        rc=0
        echo "SKIP: postgres seems not to be here"
      else
        if [ "$1" = "restore" ]; then
          shift 1
          restoreByFile $*
    
        else
          doPgsqlBackup
        fi
    
      fi
    
      echo "$0 $* [postgres] final returncode rc=$rc"
    
    # --------------------------------------------------------------------------------