#!/bin/bash prepare() { echo "Preparing to restore ..." export THISDIR=`dirname "$(readlink -f "$0")"` export DOCKER_COMPOSE_DIR=$THISDIR export DATA_DIR=$DOCKER_COMPOSE_DIR/data source "$THISDIR/common.sh" } restore() { if [ -d "${DATA_DIR}" ]; then echo "Restore data directory found" echo "Removing existing data ..." docker-compose --project-directory "${DOCKER_COMPOSE_DIR}" down --volumes echo "Performing a restore ..." else echo "Restore data directory not found; doing nothing ..." fi } restore_database() { CONTAINER_ID=$1 SQL_SCHEMA_FILENAME=$2 SQL_DATA_FILENAME=$3 DB_NAME=$4 DB_USERNAME=$5 DISPLAY_NAME=$6 if [ -f "${DATA_DIR}/$SQL_SCHEMA_FILENAME" ]; then echo "Restoring the $DISPLAY_NAME database ..." echo "SET session_replication_role = 'replica';" | cat - "${DATA_DIR}/$SQL_DATA_FILENAME" > /tmp/db-data.sql echo "Uploading $DISPLAY_NAME database schema to Docker container ..." docker cp "${DATA_DIR}/$SQL_SCHEMA_FILENAME" $CONTAINER_ID:/tmp echo "Uploading $DISPLAY_NAME database data to Docker container ..." docker cp /tmp/db-data.sql $CONTAINER_ID:/tmp rm /tmp/db-data.sql echo "Restoring $DISPLAY_NAME database schema ..." docker container exec $CONTAINER_ID psql -U $DB_USERNAME -f /tmp/$SQL_SCHEMA_FILENAME $DB_NAME echo "Restoring $DISPLAY_NAME database data ..." docker container exec $CONTAINER_ID psql -U $DB_USERNAME -f /tmp/db-data.sql $DB_NAME fi } restore_binaryData() { CONTAINER_ID=$1 DATA_DIRECTORY=$2 CONTAINER_PATH=$3 DISPLAY_NAME=$4 if [ -d "${DATA_DIR}/$DATA_DIRECTORY" ]; then echo "Restoring the $DISPLAY_NAME binary data ..." echo "Copying $DISPLAY_NAME binary data ..." sudo docker cp "${DATA_DIR}/$DATA_DIRECTORY" "$CONTAINER_ID:$CONTAINER_PATH" fi } prepare restore