summaryrefslogtreecommitdiffstats
path: root/completions/psql
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--completions/psql188
1 files changed, 188 insertions, 0 deletions
diff --git a/completions/psql b/completions/psql
new file mode 100644
index 0000000..4bc6049
--- /dev/null
+++ b/completions/psql
@@ -0,0 +1,188 @@
+# 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