Sofistikovanější výpis seznamu databází pro použití v bashi
Skočit na navigaci
Skočit na vyhledávání
Pro zjednodušení života jsem si napsal jednoduchý skriptík, který vrací seznam databází na serveru. Parametry jako např. pouze nesystémové databáze, maska, pouze db daného vlastníka určují obsah.
#!/bin/sh
quoted=0
dbname="AND true"
user="AND true "
while getopts ":qsSp:D:h:u:" options; do
case $options in
p ) port="-p $OPTARG";;
q ) quoted=1;;
s ) user=" $user AND datdba = (select usesysid from pg_user where usename = 'postgres') ";;
S ) user=" $user AND datdba <> (select usesysid from pg_user where usename = 'postgres') ";;
D ) dbname=" $dbname AND datname <> '$OPTARG' ";;
h ) host="-h $OPTARG";;
u ) user=" $user AND datdba = (SELECT usesysid from pg_user where usename = '$OPTARG') ";;
\? )
echo "listdb list available databases.
Usage:
listdb [OPTIONS]... [masks]...
Options controlling the output content:
-s show system databases
-S show user's databases
-D DATABASE exclude database
-q quote output
-u USERNAME show only databases that owns user
Connection options:
-h HOSTNAME database server host or socket directory (default: \"local socket\")
-p PORT database server port (default: \"5432\")
Mask should contain wild chars like \"%\"."
exit 1
;;
: )
echo "Option -$OPTARG requires an argument." >&2
exit 1
;;
* ) echo $OPTARG;;
esac
done
ldbname=" false "
for p in ${@:$OPTIND}
do
ldbname="$ldbname OR datname LIKE '$p' "
done
if [[ "$ldbname" == " false " ]]
then
ldbname=true
fi
wherec="where true $user $dbname AND ( $ldbname )"
for db in `psql $port $host -A -t -l -c "select datname, quote_literal(datname) from pg_database $wherec" postgres`
do
BIFS=$IFS
IFS="|"
dbn=($db)
echo ${dbn[$quoted]}
IFS=$BIFS
done;
Příklady užití:
[pavel@localhost ~]$ ./listdb -p 5483 -q 'template1' 'template0' 'postgres' 'omega' [pavel@localhost ~]$ ./listdb -p 5483 -q -S 'omega' [pavel@localhost ~]$ ./listdb -p 5483 -q o% p% 'postgres' 'omega' [pavel@localhost ~]$ ./listdb -p 5483 o% p% postgres omega [pavel@localhost ~]$