# 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[@]} -eq 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