# bash completion for Postgresql -*- shell-script -*- _pg_databases() { # -w was introduced in 8.4, https://launchpad.net/bugs/164772 # "Access privileges" in output may contain linefeeds, hence the NF > 1 COMPREPLY=($(compgen -W "$(psql -XAtqwlF $'\t' 2>/dev/null | awk 'NF > 1 { print $1 }')" -- "$cur")) } _pg_users() { # -w was introduced in 8.4, https://launchpad.net/bugs/164772 COMPREPLY=($(compgen -W "$(psql -XAtqwc 'select usename from pg_user' \ template1 2>/dev/null)" -- "$cur")) ((${#COMPREPLY[@]} == 0)) && COMPREPLY=($(compgen -u -- "$cur")) } # createdb(1) completion # _createdb() { local cur prev words cword split _init_completion -s || return case $prev in --host | -!(-*)h) _known_hosts_real -- "$cur" return ;; --username | --owner | -!(-*)[UO]) _pg_users return ;; --help | --version | --port | --tablespace | --encoding | --template | -!(-*)[pDET]) return ;; esac $split && return if [[ $cur == -* ]]; then COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur")) [[ ${COMPREPLY-} == *= ]] && compopt -o nospace else _pg_databases fi } && complete -F _createdb createdb # createuser(1) completion # _createuser() { local cur prev words cword split _init_completion -s || return case $prev in --help | --version | --port | --connection-limit | -!(-*)[pc]) return ;; --host | -!(-*)h) _known_hosts_real -- "$cur" return ;; --username | -!(-*)U) _pg_users return ;; esac $split && return if [[ $cur == -* ]]; then COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur")) [[ ${COMPREPLY-} == *= ]] && compopt -o nospace fi } && complete -F _createuser createuser # dropdb(1) completion # _dropdb() { local cur prev words cword split _init_completion -s || return case $prev in --host | -!(-*)h) _known_hosts_real -- "$cur" return ;; --username | -!(-*)U) _pg_users return ;; --help | --version) return ;; esac $split && return if [[ $cur == -* ]]; then COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur")) [[ ${COMPREPLY-} == *= ]] && compopt -o nospace else _pg_databases fi } && complete -F _dropdb dropdb # dropuser(1) completion # _dropuser() { local cur prev words cword split _init_completion -s || return case $prev in --help | --version | --port | -!(-*)p) return ;; --host | -!(-*)h) _known_hosts_real -- "$cur" return ;; --username | -!(-*)U) _pg_users return ;; esac $split && return if [[ $cur == -* ]]; then COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur")) [[ ${COMPREPLY-} == *= ]] && compopt -o nospace else _pg_users fi } && complete -F _dropuser dropuser # psql(1) completion # _psql() { local cur prev words cword split _init_completion -s || return case $prev in --host | -!(-*)h) _known_hosts_real -- "$cur" return ;; --username | -!(-*)U) _pg_users return ;; --dbname | -!(-*)d) _pg_databases return ;; --output | --file | --log-file | -!(-*)[ofL]) _filedir return ;; --help | --version | --command | --field-separator | --port | --pset | \ --record-separator | --table-attr | --set | --variable | -!(-*)[?VcFpPRTv]) return ;; esac $split && return if [[ $cur == -* ]]; then # return list of available options COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur")) [[ ${COMPREPLY-} == *= ]] && compopt -o nospace else # return list of available databases _pg_databases fi } && complete -F _psql psql # ex: filetype=sh