Files
Ansible-Build/roles/postgres/files/docker-postgres-rename
T

74 lines
2.3 KiB
Bash
Executable File

#!/bin/bash
set -e
SCRIPT=$(basename "$0")
VERSION="1.0.0"
# Display Help
Help() {
echo
echo "$SCRIPT"
echo
echo "Description: Rename Postgres database in container."
echo "Syntax: $SCRIPT [-c|-s|-t|-r|-V|help]"
echo "Example: $SCRIPT -c odoo06 -s odoo -t odoo-int -r"
echo "options:"
echo " -c Docker container. Defaults to 'odoo'."
echo " -s Source database name."
echo " -t Target database name."
echo " -r Replace existing database."
echo " -V Show $SCRIPT version."
echo " help Show $SCRIPT manual."
echo
}
# Show help and exit
if [[ "$1" == "help" ]]; then
Help
exit
fi
# Initialise option flag with a false value
REPLACE='false'
# Process params
while getopts ":c: :s: :t: :V" opt; do
case $opt in
c) CONTAINER="$OPTARG";;
s) SOURCE_DATABASE="$OPTARG";;
t) TARGET_DATABASE="$OPTARG";;
r) REPLACE='true';;
V) echo "$SCRIPT version $VERSION"
exit 0
;;
\?) echo "Invalid option -$OPTARG" >&2
Help
exit;;
esac
done
# Fallback to environment vars and default values
: "${CONTAINER:=postgres}"
# Verify variables
[[ -z "$SOURCE_DATABASE" ]] && { echo "Parameter -s|source is empty" ; exit 1; }
[[ -z "$TARGET_DATABASE" ]] && { echo "Parameter -t|target is empty" ; exit 1; }
[[ "$TARGET_DATABASE" == "$SOURCE_DATABASE" ]] && { echo "Parameter -s|source and -t|target cannot be the same" ; exit 1; }
# Switch container name with id
CONTAINER_ID=$(docker ps -f "name=${CONTAINER}$" -q | tail -n1)
[[ -z "$CONTAINER_ID" ]] && { echo "Container id for $CONTAINER not found." ; exit 1; }
# Drop target database
if $REPLACE; then
docker-postgres-drop -c "$CONTAINER" -d "$TARGET_DATABASE"
fi
# Kill datbase connections
echo "Kill database connections on $SOURCE_DATABASE."
QUERY="SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = '$SOURCE_DATABASE';"
docker exec $CONTAINER_ID /bin/bash -c "psql postgres://\$POSTGRES_USER:\$POSTGRES_PASSWORD@\$HOSTNAME:5432/postgres -c \"$QUERY\""
echo "Rename database from $SOURCE_DATABASE to $TARGET_DATABASE."
docker exec $CONTAINER_ID /bin/bash -c "psql postgres://\$POSTGRES_USER:\$POSTGRES_PASSWORD@\$HOSTNAME:5432/postgres -c 'ALTER DATABASE \"$SOURCE_DATABASE\" RENAME TO \"$TARGET_DATABASE\";'"