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 ~]$