diff options
Diffstat (limited to 'completions/psql')
-rw-r--r-- | completions/psql | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/completions/psql b/completions/psql new file mode 100644 index 00000000..7e4276bc --- /dev/null +++ b/completions/psql @@ -0,0 +1,137 @@ +# 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 -AtqwlF $'\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 -Atqwc '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 + -h|--host) + _known_hosts_real "$cur" + return 0 + ;; + -U|--username|-O|--owner) + _pg_users + return 0 + ;; + -p|--port|-D|--tablespace|-E|--encoding|-T|--template) + # argument required but no completions available + return 0 + ;; + --help|--version) + # all other arguments are noop with these + return 0 + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '$( _parse_help "$1" )' -- "$cur" ) ) + [[ $COMPREPLY == *= ]] && compopt -o nospace + else + _pg_databases + fi +} && +complete -F _createdb -o default createdb + +# dropdb(1) completion +# +_dropdb() +{ + local cur prev words cword split + _init_completion -s || return + + case $prev in + -h|--host) + _known_hosts_real "$cur" + return 0 + ;; + -U|--username) + _pg_users + return 0 + ;; + --help|--version) + # all other arguments are noop with these + return 0 + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '$( _parse_help "$1" )' -- "$cur" ) ) + [[ $COMPREPLY == *= ]] && compopt -o nospace + else + _pg_databases + fi +} && +complete -F _dropdb -o default dropdb + +# psql(1) completion +# +_psql() +{ + local cur prev words cword split + _init_completion -s || return + + case $prev in + -h|--host) + _known_hosts_real "$cur" + return 0 + ;; + -U|--username) + _pg_users + return 0 + ;; + -d|--dbname) + _pg_databases + return 0 + ;; + -o|--output|-f|--file|-L|--log-file) + _filedir + return 0 + ;; + -c|--command|-F|--field-separator|-p|--port|-P|--pset|\ + -R|--record-separator|-T|--table-attr|-v|--set|--variable) + # argument required but no completions available + return 0 + ;; + -\?|--help|-V|--version) + # all other arguments are noop with these + return 0 + ;; + esac + + $split && return 0 + + 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: ts=4 sw=4 et filetype=sh |