74 lines
2.3 KiB
Bash
Executable File
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\";'"
|