Sofistikovanější výpis seznamu databází pro použití v bashi
Verze z 26. 2. 2009, 07:29, kterou vytvořil imported>Pavel
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 ~]$