Files
DBAdmin/inbox/DataBase/PostgreSQL/dba_scripts/tables_with_column_name.sh
T
2026-05-18 06:40:19 +00:00

66 lines
1.3 KiB
Bash

#!/bin/bash
# SHOWS ALL TABLES WITH A COLUMN NAME LIKE <ColumnName>
USER=""
PORT=""
usage() {
echo "Usage: $0 -d <dbname> -c <colname> [-U <user> -p <port>]"
exit 1
}
while getopts "d:c:p:uU:" OPT;
do case "${OPT}" in
d) DBNAME=$OPTARG
;;
p) PORT="-p $OPTARG"
;;
c) COLNAME="$OPTARG"
;;
U) USER="-U $OPTARG"
;;
u) usage
;;
[?]) usage
esac;
done
echo "col=$COLNAME"
if [ "$DBNAME" = "" ]
then
DBNAME="enf"
fi
if [ "$COLNAME" = "" ]
then
usage
exit 1
fi
psql -a $USER $PORT $DBNAME <<_CODE_
SELECt c.table_schema as schema,
c.table_name as table,
c.column_name as column,
c.data_type as type,
case when c.data_type LIKE '%char%'
then COALESCE(character_maximum_length::text, 'N/A')
when c.data_type LIKE '%numeric%'
then '(' || c.numeric_precision::text || ', ' || c.numeric_scale::text || ')'
when c.data_type LIKE '%int%'
then c.numeric_precision::text
else COALESCE(character_maximum_length::text, 'N/A')
end as size
FROM information_schema.columns c
WHERE c.table_schema NOT LIKE 'pg_%'
AND c.table_schema NOT LIKE 'information%'
AND c.table_name NOT LIKE 'sql_%'
AND c.column_name LIKE '%$COLNAME%'
AND c.is_updatable = 'YES'
ORDER BY c.table_name, c.column_name;
_CODE_
exit 0