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