Листинг скрипта script_block_device_metadata.sh

#!/bin/bash

set -e  # Выход при любой ошибке

# Параметры подключения к базе данных
HOST="localhost"
DBNAME="rubackup"
USER="rubackup"
PASS="12345"
BACKUP_FILENAME="rb_block_device_metadata_backup.sql"
PORT=5432

# Список таблиц для резервного копирования
TABLE_LIST="-t pool_list -t pool_block_device_extention -t storage_block_devices"
# Запрос на получение дополнительных таблиц для резервного копирования
QUERY_TO_GET_ADDITIONAL_TABLES="SELECT DISTINCT table_name
                                FROM information_schema.tables
                                WHERE table_name LIKE 'deduplicated_%'"


if [ "$#" -eq 1 ]; then
    if [ "$1" = "dump" ]; then
        echo "RuBackup script handler saving Dedup pool metadata started"

        ADDITIONAL_TABLES=$(PGPASSWORD="$PASS" psql \
            -h "$HOST" \
            -d "$DBNAME" -U "$USER" \
            -p "$PORT" -qt -c "$QUERY_TO_GET_ADDITIONAL_TABLES")

        for table in $ADDITIONAL_TABLES; do
            TABLE_LIST="$TABLE_LIST -t $table"
        done

        # Создание резервной копии всех таблиц в одном файле
        PGPASSWORD="$PASS" pg_dump \
            -h "$HOST" -d "$DBNAME" -U "$USER" $TABLE_LIST \
            -p "$PORT" > "$BACKUP_FILENAME"

        echo "A backup copy of the table is saved in a file $BACKUP_FILENAME"
        exit 0
    fi

    if [ "$1" = "restore" ]; then
        echo "RuBackup script handler restores Dedup pool metadata started"
        # Восстановление
        PGPASSWORD="$PASS" psql \
            -h "$HOST" -d "$DBNAME" -U "$USER" -f "$BACKUP_FILENAME" \
            -p "$PORT"
        echo "RuBackup script handler restores Dedup pool metadata finished"
        exit 0
    fi

    echo "Incorrect argument. Type 'dump' or 'restore'"
    exit 1
fi

echo "Argument required. Type 'dump' or 'restore'"
exit 1