#!/usr/bin/env bash
set -e

script=$(basename "$0")
version="1.0.1"

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
}

if [[ "$1" == 'help' ]]; then
    help
    exit
fi

container=postgres

while getopts ':c: :d:' opt; do
  case $opt in
    c) container="$OPTARG";;
    d) database="$OPTARG";;
    \?) echo "Invalid option -$OPTARG" >&2
    help
    exit 1;;
  esac
done

[[ -z "$database" ]] && { echo 'Parameter -d|database is empty.' ; exit 1; }

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 /bin/bash -c "psql postgresql://\$POSTGRES_USER:\$POSTGRES_PASSWORD@\$HOSTNAME/$database -c \"$query\""
