diff options
Diffstat (limited to 'completions/postgresql')
-rw-r--r-- | completions/postgresql | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/completions/postgresql b/completions/postgresql new file mode 100644 index 00000000..f874b67b --- /dev/null +++ b/completions/postgresql @@ -0,0 +1,162 @@ +# bash completion for Postgresql + +have psql && { +_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 split=false + + COMPREPLY=() + _get_comp_words_by_ref cur prev + + _split_longopt && split=true + + 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 '--tablespace --template --encoding --host \ + --port --username --password --echo --quiet --help --version' \ + -- "$cur" ) ) + else + _pg_databases + fi +} +complete -F _createdb -o default createdb + +# dropdb(1) completion +# +_dropdb() +{ + local cur prev split=false + + COMPREPLY=() + _get_comp_words_by_ref cur prev + + _split_longopt && split=true + + 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 '--host --port --username --password \ + --interactive --echo --quiet --help --version' -- "$cur" ) ) + else + _pg_databases + fi +} +complete -F _dropdb -o default dropdb + +# psql(1) completion +# +_psql() +{ + local cur prev split=false + + COMPREPLY=() + _get_comp_words_by_ref cur prev + + _split_longopt && split=true + + 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 '--echo-all --no-align --command --dbname \ + --echo-queries --echo-hidden --file --field-separator --host \ + --html --list --log-file --output --port --pset --quiet \ + --record-separator --single-step --single-line --tuples-only \ + --table-attr --username --set --version --password --expanded \ + --no-psqlrc --single-transaction --help' -- "$cur" ) ) + else + # return list of available databases + _pg_databases + fi +} +complete -F _psql psql +} + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh |