81 lines
2.0 KiB
Bash
Executable File
81 lines
2.0 KiB
Bash
Executable File
#!/bin/bash
|
|
set -e
|
|
|
|
# Get script name
|
|
SCRIPT=$(basename "$0")
|
|
|
|
# Display Help
|
|
Help() {
|
|
echo
|
|
echo "$SCRIPT"
|
|
echo
|
|
echo "Description: Restore Docker Postgres database."
|
|
echo "Syntax: $SCRIPT [-c|-d|-f|-r|-i|help]"
|
|
echo "Example: $SCRIPT -d odoo -f /tmp/dump.sql -c postgres01 -r"
|
|
echo "options:"
|
|
echo " -c Docker container name. Defaults to 'postgres'."
|
|
echo " -d Name of database. Defaults to filename"
|
|
echo " -f Path to sql dump."
|
|
echo " -r Replace existing database."
|
|
echo " -i Create database."
|
|
echo " help Show $SCRIPT manual."
|
|
echo
|
|
}
|
|
|
|
# Show help and exit
|
|
if [[ "$1" == "help" ]]; then
|
|
Help
|
|
exit
|
|
fi
|
|
|
|
# Initialise option flag with a false value
|
|
DROP='false'
|
|
CREATE='false'
|
|
|
|
# Process params
|
|
while getopts ":c: :d: :f: :r :i" opt; do
|
|
case $opt in
|
|
c) CONTAINER="$OPTARG";;
|
|
d) DATABASE="$OPTARG";;
|
|
f) FILE="$OPTARG";;
|
|
r) DROP='true'
|
|
CREATE='true'
|
|
;;
|
|
i) CREATE='true';;
|
|
\?) echo "Invalid option -$OPTARG" >&2
|
|
Help
|
|
exit;;
|
|
esac
|
|
done
|
|
|
|
# Fallback to environment vars and default values
|
|
: ${CONTAINER:='postgres'}
|
|
FILENAME=$(basename -- "$FILE")
|
|
: ${DATABASE:="${FILENAME%%.*}"}
|
|
|
|
# Verify variables
|
|
[[ -z "$FILE" ]] && { echo "Parameter -f|filename is empty" ; exit 1; }
|
|
[[ -z "$DATABASE" ]] && { echo "Parameter -d|database is empty" ; exit 1; }
|
|
|
|
# Get postgres user
|
|
POSTGRES_USER=$(docker exec $CONTAINER bash -c "echo \$POSTGRES_USER")
|
|
|
|
if $DROP; then
|
|
docker-postgres-drop -c $CONTAINER -d $DATABASE
|
|
fi
|
|
|
|
if $CREATE; then
|
|
echo "Create Postgres database $DATABASE ..."
|
|
docker exec $CONTAINER createdb -U $POSTGRES_USER $DATABASE
|
|
fi
|
|
|
|
# Start restore
|
|
echo "Restore Postgres database $DATABASE from $FILE ..."
|
|
cat $FILE | docker exec -i $CONTAINER psql -U $POSTGRES_USER -d $DATABASE
|
|
|
|
echo "Grant all privileges on $DATABASE to $POSTGRES_USER ..."
|
|
docker exec $CONTAINER psql -U $POSTGRES_USER -d template1 -c "GRANT ALL PRIVILEGES ON DATABASE \"$DATABASE\" TO $POSTGRES_USER;"
|
|
|
|
# Notify if backup has finished
|
|
echo "The Docker Postgres restore has finished."
|