52 lines
1.2 KiB
Bash
Executable File
52 lines
1.2 KiB
Bash
Executable File
#!/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\""
|