Files
Ansible-Build/roles/postgres/files/docker-postgres-patch
T
2023-01-18 09:30:47 +01:00

59 lines
1.4 KiB
Bash
Executable File

#!/bin/bash
# Exit script if command fails
# -u stops the script on unset variables
# -e stops the script on errors
# -o pipefail stops the script if a pipe fails
set -e
# Get script name
SCRIPT=$(basename "$0")
# Display Help
Help() {
echo
echo "$SCRIPT"
echo
echo "Description: Restore docker postgres database."
echo "Syntax: $SCRIPT [-d|-f|-c|help]"
echo "Example: $SCRIPT -d odoo -f /tmp/patches/v14.0.1.6.0.sql -c postgres01"
echo "options:"
echo " -d Name of database."
echo " -f Path to sql patch."
echo " -c Docker container name. Defaults to 'postgres'."
echo " help Show $SCRIPT manual."
echo
}
# Show help and exit
if [[ $1 == 'help' ]]; then
Help
exit
fi
# Process params
while getopts ":c: :d: :f:" opt; do
case $opt in
c) CONTAINER="$OPTARG";;
d) DATABASE="$OPTARG";;
f) FILE="$OPTARG";;
\?) echo "Invalid option -$OPTARG" >&2
Help
exit;;
esac
done
# Fallback to environment vars and default values
: ${CONTAINER:='postgres'}
# Verify variables
[[ -z "$FILE" ]] && { echo "Parameter -f|filename is empty" ; exit 1; }
[[ -z "$CONTAINER" ]] && { echo "Parameter -c|container is empty" ; exit 1; }
# Get postgres user
POSTGRES_USER=$(docker exec $CONTAINER bash -c "echo \$POSTGRES_USER")
# Patch database
echo "Patch Postgres database $DATABASE using user $POSTGRES_USER with file $FILE ..."
cat $FILE | docker exec -i $CONTAINER psql -U $POSTGRES_USER -d $DATABASE