#!/bin/bash
set -e

# Get script name
SCRIPT=$(basename "$0")

# Display Help
Help() {
    echo
    echo "$SCRIPT"
    echo
    echo "Description: List table size of 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    Name of database."
    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

# Fallback to environment vars and default values
: ${CONTAINER:='postgres'}

QUERY="select
  table_name,
  pg_size_pretty(pg_total_relation_size(quote_ident(table_name))),
  pg_relation_size(quote_ident(table_name))
from information_schema.tables
where table_schema = 'public'
order by 3 desc;"

echo "Show table size for database $DATABASE in container $CONTAINER"
docker exec $CONTAINER bash -c "psql postgresql://\$POSTGRES_USER:\$POSTGRES_PASSWORD@\$HOSTNAME/$DATABASE -c \"$QUERY\""
