#!/bin/bash set -e # Get script name SCRIPT=$(basename "$0") # Display Help Help() { echo echo "$SCRIPT" echo echo "Description: Drop database in Postgres Docker container." echo "Syntax: $SCRIPT [-c|help]" echo "Example: $SCRIPT -c postgres01 -d odoo" echo "options:" echo " -c Docker container. Defaults to 'postgres'." echo " -d Comma-separated list of database names." echo " help Show $SCRIPT manual." echo } # Show help and exit if [[ "$1" == "help" ]]; then Help exit fi # Process params while getopts ":c: :d:" opt; do case $opt in c) CONTAINER="$OPTARG";; d) DATABASE="$OPTARG";; \?) echo "Invalid option -$OPTARG" >&2 Help exit;; esac done # Verify variables [[ -z "$DATABASE" ]] && { echo "Parameter -d|database is empty" ; exit 1; } [[ -z "$CONTAINER" ]] && { echo "Parameter -c|container is empty" ; exit 1; } # Set alias docker_exec_bash="docker exec $CONTAINER /bin/bash -c" # Kill datbase connections echo "Kill all database connections" QUERY="SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = '$DATABASE';" $docker_exec_bash "psql postgres://\$POSTGRES_USER:\$POSTGRES_PASSWORD@\$HOSTNAME:5432/postgres -c \"$QUERY\"" # Drop datbase echo "Drop Postgres database $DATABASE on container $CONTAINER ..." $docker_exec_bash "psql postgresql://\$POSTGRES_USER:\$POSTGRES_PASSWORD@\$HOSTNAME/postgres -tAc 'DROP DATABASE \"$DATABASE\";'"