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

pditzel
18.48.2017 e94a20bc0805bcf3178f1c227a74dc5ef942869e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#!/bin/bash
 
# dependencies
 
function check-postgresql-localhost-deps {
    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
}
 
# 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 -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 -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 -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
}
 
################################################################################
 
 
function postgresql-localhost-main {
    if [ "$POSTGRES_BACKUP_LOCAL" = "TRUE" ]; then
        run_local_pg_backups
    fi
}