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

#!/bin/bash

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

TABLE_LIST="-t pool_list -t pool_block_device_extention -t storage_block_devices" # Список таблиц для резервного копирования

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

        # Извлечение подписей из столбца "signature" в таблице "storage_block_devices"
        SIGNATURES=$(PGPASSWORD=$PASS psql -h $HOST -d $DBNAME -U $USER -qt -c "SELECT DISTINCT signature FROM storage_block_devices")

        # Формирование строки с перечислением подписей
        for signature in $SIGNATURES; do
            table_name="deduplicated_block_device_${signature}" # Формирование имени таблицы
            TABLE_LIST="$TABLE_LIST -t $table_name"             # Добавляем таблицу к списку
        done

        # Создание резервной копии всех таблиц в одном файле
        PGPASSWORD=$PASS pg_dump -h $HOST -d $DBNAME -U $USER $TABLE_LIST >$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 localhost -d rubackup -U rubackup -f $BACKUP_FILENAME
        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