From d02736c0ce7704dc4329c50bd2aee738704f21a3 Mon Sep 17 00:00:00 2001 From: Jan Verbeek <55185397+janverb@users.noreply.github.com> Date: Fri, 28 Feb 2020 11:16:41 +0100 Subject: [PATCH] Improve psql completions and add some related commands (#6620) --- CHANGELOG.md | 1 + share/completions/createdb.fish | 21 ++++ share/completions/dropdb.fish | 16 ++++ share/completions/pg_dump.fish | 60 ++++++++++++ share/completions/pg_dumpall.fish | 48 ++++++++++ share/completions/pg_restore.fish | 47 +++++++++ share/completions/psql.fish | 96 +++++++------------ .../__fish_complete_pg_database.fish | 3 + share/functions/__fish_complete_pg_user.fish | 3 + 9 files changed, 235 insertions(+), 60 deletions(-) create mode 100644 share/completions/createdb.fish create mode 100644 share/completions/dropdb.fish create mode 100644 share/completions/pg_dump.fish create mode 100644 share/completions/pg_dumpall.fish create mode 100644 share/completions/pg_restore.fish create mode 100644 share/functions/__fish_complete_pg_database.fish create mode 100644 share/functions/__fish_complete_pg_user.fish diff --git a/CHANGELOG.md b/CHANGELOG.md index 1806d1a61..647d9dd68 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ #### Completions - Added completions for - `wireshark`, `tshark`, and `dumpcap` + - `dropdb`, `createdb`, `pg_restore`, `pg_dump` and `pg_dumpall` ### Deprecations and removed features diff --git a/share/completions/createdb.fish b/share/completions/createdb.fish new file mode 100644 index 000000000..93aee4e3c --- /dev/null +++ b/share/completions/createdb.fish @@ -0,0 +1,21 @@ +complete -c createdb --no-files -a '(__fish_complete_pg_database)' + +# Options: +complete -c createdb -s D -l tablespace -x -d "Default tablespace for the database" +complete -c createdb -s e -l echo -d "Show the commands being sent to the server" +complete -c createdb -s E -l encoding -x -d "Encoding for the database" +complete -c createdb -s l -l locale -x -d "Locale settings for the database" +complete -c createdb -l lc-collate -x -d "LC_COLLATE setting for the database" +complete -c createdb -l lc-ctype -x -d "LC_CTYPE setting for the database" +complete -c createdb -s O -l owner -x -a '(__fish_complete_pg_user)' -d "Database user to own the new database" +complete -c createdb -s T -l template -x -a '(__fish_complete_pg_database)' -d "Template database to copy" +complete -c createdb -s V -l version -d "Output version information, then exit" +complete -c createdb -s '?' -l help -d "Show help, then exit" + +# Connection options: +complete -c createdb -s h -l host -x -a '(__fish_print_hostnames)' -d "Database server host or socket directory" +complete -c createdb -s p -l port -x -d "Database server port" +complete -c createdb -s U -l username -x -a '(__fish_complete_pg_user)' -d "User name to connect as" +complete -c createdb -s w -l no-password -d "Never prompt for password" +complete -c createdb -s W -l password -d "Force password prompt" +complete -c createdb -l maintenance-db -x -a '(__fish_complete_pg_database)' -d "Alternate maintenance database" diff --git a/share/completions/dropdb.fish b/share/completions/dropdb.fish new file mode 100644 index 000000000..67a0538dc --- /dev/null +++ b/share/completions/dropdb.fish @@ -0,0 +1,16 @@ +complete -c dropdb --no-files -a '(__fish_complete_pg_database)' + +# Options: +complete -c dropdb -s e -l echo -d "Show the commands being sent to the server" +complete -c dropdb -s i -l interactive -d "Prompt before deleting anything" +complete -c dropdb -s V -l version -d "Output version information, then exit" +complete -c dropdb -l if-exists -d "Don't report error if database doesn't exist" +complete -c dropdb -s '?' -l help -d "Show help, then exit" + +# Connection options: +complete -c dropdb -s h -l host -x -a '(__fish_print_hostnames)' -d "Database server host or socket directory" +complete -c dropdb -s p -l port -x -d "Database server port" +complete -c dropdb -s U -l username -x -a '(__fish_complete_pg_user)' -d "User name to connect as" +complete -c dropdb -s w -l no-password -d "Never prompt for password" +complete -c dropdb -s W -l password -d "Force password prompt" +complete -c dropdb -l maintenance-db -x -a '(__fish_complete_pg_database)' -d "Alternate maintenance database" diff --git a/share/completions/pg_dump.fish b/share/completions/pg_dump.fish new file mode 100644 index 000000000..d35943560 --- /dev/null +++ b/share/completions/pg_dump.fish @@ -0,0 +1,60 @@ +complete -c pg_dump --no-files -a '(__fish_complete_pg_database)' + +# General options: +complete -c pg_dump -s f -l file -r -d "Output file or directory name" +complete -c pg_dump -s F -l format -x -a "p\t'Plain text' c\t'Custom format' d\t'Directory archive' t\t'Tar archive'" -d "Output file format" +complete -c pg_dump -s j -l jobs -x -d "Use this many parallel jobs to dump" +complete -c pg_dump -s v -l verbose -d "Verbose mode" +complete -c pg_dump -s V -l version -d "Output version information, then exit" +complete -c pg_dump -s Z -l compress -x -d "Compression level for compressed formats" +complete -c pg_dump -l lock-wait-timeout -x -d "Fail after waiting TIMEOUT for a table lock" +complete -c pg_dump -l no-sync -d "Do not wait for changes to be written safely to disk" +complete -c pg_dump -s '?' -l help -d "Show this help, then exit" + +# Options controlling the output content: +complete -c pg_dump -s a -l data-only -d "Dump only the data, not the schema" +complete -c pg_dump -s b -l blobs -d "Include large objects in dump" +complete -c pg_dump -s B -l no-blobs -d "Exclude large objects in dump" +complete -c pg_dump -s c -l clean -d "Clean (drop) database objects before recreating" +complete -c pg_dump -s C -l create -d "Include commands to create database in dump" +complete -c pg_dump -s E -l encoding -x -d "Dump the data in encoding ENCODING" +complete -c pg_dump -s n -l schema -x -d "Dump the named schemas only" +complete -c pg_dump -s N -l exclude-schema -x -d "Do NOT dump the named schemas" +complete -c pg_dump -s o -l oids -d "Include OIDs in dump" +complete -c pg_dump -s O -l no-owner -d "Skip restoration of object ownership in plain-text format" +complete -c pg_dump -s s -l schema-only -d "Dump only the schema, no data" +complete -c pg_dump -s S -l superuser -x -d "Superuser user name to use in plain-text format" +complete -c pg_dump -s t -l table -x -d "Dump the named tables only" +complete -c pg_dump -s T -l exclude-table -x -d "Do NOT dump the named tables" +complete -c pg_dump -s x -l no-privileges -d "Do not dump privileges (grant/revoke)" +complete -c pg_dump -l binary-upgrade -d "For use by upgrade utilities only" +complete -c pg_dump -l column-inserts -d "Dump data as INSERT commands with column names" +complete -c pg_dump -l disable-dollar-quoting -d "Disable dollar quoting, use SQL standard quoting" +complete -c pg_dump -l disable-triggers -d "Disable triggers during data-only restore" +complete -c pg_dump -l enable-row-security -d "Enable row security (dump only content user has access to)" +complete -c pg_dump -l exclude-table-data -x -d "Do NOT dump data for the named tables" +complete -c pg_dump -l if-exists -d "Use IF EXISTS when dropping objects" +complete -c pg_dump -l inserts -d "Dump data as INSERT commands, rather than COPY" +complete -c pg_dump -l load-via-partition-root -d "Load partitions via the root table" +complete -c pg_dump -l no-comments -d "Do not dump comments" +complete -c pg_dump -l no-publications -d "Do not dump publications" +complete -c pg_dump -l no-security-labels -d "Do not dump security label assignments" +complete -c pg_dump -l no-subscriptions -d "Do not dump subscriptions" +complete -c pg_dump -l no-synchronized-snapshots -d "Do not use synchronized snapshots in parallel jobs" +complete -c pg_dump -l no-tablespaces -d "Do not dump tablespace assignments" +complete -c pg_dump -l no-unlogged-table-data -d "Do not dump unlogged table data" +complete -c pg_dump -l quote-all-identifiers -d "Quote all identifiers, even if not key words" +complete -c pg_dump -l section -x -a "pre-data data post-data" -d "Dump named section (pre-data, data, or post-data)" +complete -c pg_dump -l serializable-deferrable -d "Wait until the dump can run without anomalies" +complete -c pg_dump -l snapshot -x -d "Use given snapshot for the dump" +complete -c pg_dump -l strict-names -d "Require table and/or schema include patterns to match at least one entity each" +complete -c pg_dump -l use-set-session-authorization -d "Use SET SESSION AUTHORIZATION commands instead of ALTER OWNER commands to set ownership" + +# Connection options: +complete -c pg_dump -s d -l dbname -x -a '(__fish_complete_pg_database)' -d "Database to dump" +complete -c pg_dump -s h -l host -x -a '(__fish_print_hostnames)' -d "Database server host or socket directory" +complete -c pg_dump -s p -l port -x -d "Database server port number" +complete -c pg_dump -s U -l username -x -a '(__fish_complete_pg_user)' -d "Connect as specified database user" +complete -c pg_dump -s w -l no-password -d "Never prompt for password" +complete -c pg_dump -s W -l password -d "Force password prompt (should happen automatically)" +complete -c pg_dump -l role -x -d "Do SET ROLE before dump" diff --git a/share/completions/pg_dumpall.fish b/share/completions/pg_dumpall.fish new file mode 100644 index 000000000..347474d2c --- /dev/null +++ b/share/completions/pg_dumpall.fish @@ -0,0 +1,48 @@ +complete -c pg_dumpall --no-files + +# General options: +complete -c pg_dumpall -s f -l file -r -d "Output file name" +complete -c pg_dumpall -s v -l verbose -d "Verbose mode" +complete -c pg_dumpall -s V -l version -d "Output version information, then exit" +complete -c pg_dumpall -l lock-wait-timeout -x -d "Fail after waiting TIMEOUT for a table lock" +complete -c pg_dumpall -s '?' -l help -d "Show this help, then exit" + +# Options controlling the output content: +complete -c pg_dumpall -s a -l data-only -d "Dump only the data, not the schema" +complete -c pg_dumpall -s c -l clean -d "Clean (drop) database objects before recreating" +complete -c pg_dumpall -s E -l encoding -x -d "Dump the data in encoding ENCODING" +complete -c pg_dumpall -s g -l globals-only -d "Dump only global objects, no databases" +complete -c pg_dumpall -s o -l oids -d "Include OIDs in dump" +complete -c pg_dumpall -s O -l no-owner -d "Skip restoration of object ownership" +complete -c pg_dumpall -s r -l roles-only -d "Dump only roles, no databases or tablespaces" +complete -c pg_dumpall -s s -l schema-only -d "Dump only the schema, no data" +complete -c pg_dumpall -s S -l superuser -x -d "Superuser user name to use in the dump" +complete -c pg_dumpall -s t -l tablespaces-only -d "Dump only tablespaces, no databases or roles" +complete -c pg_dumpall -s x -l no-privileges -d "Do not dump privileges (grant/revoke)" +complete -c pg_dumpall -l binary-upgrade -d "For use by upgrade utilities only" +complete -c pg_dumpall -l column-inserts -d "Dump data as INSERT commands with column names" +complete -c pg_dumpall -l disable-dollar-quoting -d "Disable dollar quoting, use SQL standard quoting" +complete -c pg_dumpall -l disable-triggers -d "Disable triggers during data-only restore" +complete -c pg_dumpall -l if-exists -d "Use IF EXISTS when dropping objects" +complete -c pg_dumpall -l inserts -d "Dump data as INSERT commands, rather than COPY" +complete -c pg_dumpall -l load-via-partition-root -d "Load partitions via the root table" +complete -c pg_dumpall -l no-comments -d "Do not dump comments" +complete -c pg_dumpall -l no-publications -d "Do not dump publications" +complete -c pg_dumpall -l no-role-passwords -d "Do not dump passwords for roles" +complete -c pg_dumpall -l no-security-labels -d "Do not dump security label assignments" +complete -c pg_dumpall -l no-subscriptions -d "Do not dump subscriptions" +complete -c pg_dumpall -l no-sync -d "Do not wait for changes to be written safely to disk" +complete -c pg_dumpall -l no-tablespaces -d "Do not dump tablespace assignments" +complete -c pg_dumpall -l no-unlogged-table-data -d "Do not dump unlogged table data" +complete -c pg_dumpall -l quote-all-identifiers -d "Quote all identifiers, even if not key words" +complete -c pg_dumpall -l use-set-session-authorization -d "Use SET SESSION AUTHORIZATION commands instead of ALTER OWNER commands to set ownership" + +# Connection options: +complete -c pg_dumpall -s d -l dbname -x -a '(__fish_complete_pg_database)' -d "Database to dump" +complete -c pg_dumpall -s h -l host -x -a '(__fish_print_hostnames)' -d "Database server host or socket directory" +complete -c pg_dumpall -s l -l database -x -a '(__fish_complete_pg_database)' -d "Alternative default database" +complete -c pg_dumpall -s p -l port -x -d "Database server port number" +complete -c pg_dumpall -s U -l username -x -a '(__fish_complete_pg_user)' -d "Connect as specified database user" +complete -c pg_dumpall -s w -l no-password -d "Never prompt for password" +complete -c pg_dumpall -s W -l password -d "Force password prompt (should happen automatically)" +complete -c pg_dumpall -l role -x -d "Do SET ROLE before dump" diff --git a/share/completions/pg_restore.fish b/share/completions/pg_restore.fish new file mode 100644 index 000000000..68d1cd4a4 --- /dev/null +++ b/share/completions/pg_restore.fish @@ -0,0 +1,47 @@ +# General options: +complete -c pg_restore -s d -l dbname -x -a '(__fish_complete_pg_database)' -d "Connect to database name" +complete -c pg_restore -s f -l file -a '-' -r -d "Output file name (- for stdout)" +complete -c pg_restore -s F -l format -x -a "c\t'Custom format (pg_dump)' d\t'Directory archive' t\t'Tar archive'" -d "Backup file format (should be automatic)" +complete -c pg_restore -s l -l list -d "Print summarized TOC of the archive" +complete -c pg_restore -s v -l verbose -d "Verbose mode" +complete -c pg_restore -s V -l version -d "Output version information, then exit" +complete -c pg_restore -s '?' -l help -d "Show help, then exit" + +# Options controlling the restore: +complete -c pg_restore -s a -l data-only -d "Restore only the data, no schema" +complete -c pg_restore -s c -l clean -d "Clean (drop) database objects before recreating" +complete -c pg_restore -s C -l create -d "Create the target database" +complete -c pg_restore -s e -l exit-on-error -d "Exit on error, default is to continue" +complete -c pg_restore -s I -l index -x -d "Restore named index" +complete -c pg_restore -s j -l jobs -x -d "Use this many parallel jobs to restore" +complete -c pg_restore -s L -l use-list -r -d "Use table of contents from this file for selecting/ordering output" +complete -c pg_restore -s n -l schema -x -d "Restore only objects in this schema" +complete -c pg_restore -s N -l exclude-schema -x -d "Do not restore objects in this schema" +complete -c pg_restore -s O -l no-owner -d "Skip restoration of object ownership" +complete -c pg_restore -s P -l function -x -d "Restore named function" +complete -c pg_restore -s s -l schema-only -d "Restore only the schema, no data" +complete -c pg_restore -s S -l superuser -x -a '(__fish_complete_pg_user)' -d "Superuser user name to use for disabling triggers" +complete -c pg_restore -s t -l table -x -d "Restore named relation (table, view, etc.)" +complete -c pg_restore -s T -l trigger -x -d "Restore named trigger" +complete -c pg_restore -s x -l no-privileges -d "Skip restoration of access privileges (grant/revoke)" +complete -c pg_restore -s 1 -l single-transaction -d "Restore as a single transaction" +complete -c pg_restore -l disable-triggers -d "Disable triggers during data-only restore" +complete -c pg_restore -l enable-row-security -d "Enable row security" +complete -c pg_restore -l if-exists -d "Use IF EXISTS when dropping objects" +complete -c pg_restore -l no-comments -d "Do not restore comments" +complete -c pg_restore -l no-data-for-failed-tables -d "Do not restore data of tables that could not be created" +complete -c pg_restore -l no-publications -d "Do not restore publications" +complete -c pg_restore -l no-security-labels -d "Do not restore security labels" +complete -c pg_restore -l no-subscriptions -d "Do not restore subscriptions" +complete -c pg_restore -l no-tablespaces -d "Do not restore tablespace assignments" +complete -c pg_restore -l section -x -d "Restore named section (pre-data, data, or post-data)" +complete -c pg_restore -l strict-names -d "Require table and/or schema include patterns to match at least one entity each" +complete -c pg_restore -l use-set-session-authorization -d "Use SET SESSION AUTHORIZATION commands instead of ALTER OWNER commands to set ownership" + +# Connection options: +complete -c pg_restore -s h -l host -x -a '(__fish_print_hostnames)' -d "Database server host or socket directory" +complete -c pg_restore -s p -l port -x -d "Database server port number" +complete -c pg_restore -s U -l username -x -a '(__fish_complete_pg_user)' -d "Connect as specified database user" +complete -c pg_restore -s w -l no-password -d "Never prompt for password" +complete -c pg_restore -s W -l password -d "Force password prompt (should happen automatically)" +complete -c pg_restore -l role -x -d "Do SET ROLE before restore" diff --git a/share/completions/psql.fish b/share/completions/psql.fish index 734fc759b..5a9da6c45 100644 --- a/share/completions/psql.fish +++ b/share/completions/psql.fish @@ -1,66 +1,42 @@ - -function __fish_complete_pg_database - psql -AtqwlF \t 2>/dev/null | awk 'NF > 1 { print $1 }' -end - -function __fish_complete_pg_user - psql -Atqwc 'select usename from pg_user' template1 2>/dev/null -end - complete -c psql --no-files -a '(__fish_complete_pg_database)' - -# # General options: -# +complete -c psql -s d -l dbname -x -a '(__fish_complete_pg_database)' -d "Database name to connect to" +complete -c psql -s c -l command -d "Run only single command (SQL or internal) and exit" +complete -c psql -s f -l file -r -d "Execute commands from file, then exit" +complete -c psql -s l -l list -d "List available databases, then exit" +complete -c psql -s v -l set -l variable -x -d "Set psql variable NAME to VALUE" +complete -c psql -s X -l no-psqlrc -d "Do not read startup file (~/.psqlrc)" +complete -c psql -s 1 -l single-transaction -d "Execute command file as a single transaction" +complete -c psql -s '?' -l help -a "options commands variables" -d "Show this help, then exit" +complete -c psql -l version -d "Output version information, then exit" -complete -c psql -s d -l dbname -a '(__fish_complete_pg_database)' -d "database name to connect to" -complete -c psql -s c -l command -d "run only single command (SQL or internal) and exit" -complete -c psql -s f -l file -r -d "execute commands from file, then exit" -complete -c psql -s l -l list -d "list available databases, then exit" +# Input and output options: +complete -c psql -s a -l echo-all -d "Echo all input from script" +complete -c psql -s b -l echo-errors -d "Echo failed commands" +complete -c psql -s e -l echo-queries -d "Echo commands sent to server" +complete -c psql -s E -l echo-hidden -d "Display queries that internal commands generate" +complete -c psql -s L -l log-file -r -d "Send session log to file" +complete -c psql -s n -l no-readline -d "Disable enhanced command line editing (readline)" +complete -c psql -s o -l output -r -d "Send query results to file (or |pipe)" +complete -c psql -s q -l quiet -d "Run quietly (no messages, only query output)" +complete -c psql -s s -l single-step -d "Single-step mode (confirm each query)" +complete -c psql -s S -l single-line -d "Single-line mode (end of line terminates SQL command)" -# complete -c psql -s v -l set=, --variable=NAME=VALUE -# set psql variable NAME to VALUE +# Output format options: +complete -c psql -s A -l no-align -d "Unaligned table output mode" +complete -c psql -s H -l html -d "HTML table output mode" +complete -c psql -s P -l pset -d "Set printing option VAR to ARG (see \pset command)" +complete -c psql -s t -l tuples-only -d "Print rows only" +complete -c psql -s T -l table-attr -d "Set HTML table tag attributes (e.g., width, border)" +complete -c psql -s x -l expanded -d "Turn on expanded table output" +complete -c psql -s F -l field-separator -x -d "Set field separator (default: '|')" +complete -c psql -s R -l record-separator -x -d "Set record separator (default: newline)" +complete -c psql -s 0 -l record-separator-zero -d "Set record separator for unaligned output to zero byte" -complete -c psql -s X -l no-psqlrc -d "do not read startup file (~/.psqlrc)" -complete -c psql -s 1 -l single-transaction -d "execute command file as a single transaction" -complete -c psql -l help -d "show this help, then exit" -complete -c psql -l version -d "output version information, then exit" - -# -# Input and output options: -# - -complete -c psql -s a, -l echo-all -d "echo all input from script" -complete -c psql -s e, -l echo-queries -d "echo commands sent to server" -complete -c psql -s E, -l echo-hidden -d "display queries that internal commands generate" -complete -c psql -s L, -l log-file -d "send session log to file" -complete -c psql -s n, -l no-readline -d "disable enhanced command line editing (readline)" -complete -c psql -s o, -l output -d "send query results to file (or |pipe)" -complete -c psql -s q, -l quiet -d "run quietly (no messages, only query output)" -complete -c psql -s s, -l single-step -d "single-step mode (confirm each query)" -complete -c psql -s S, -l single-line -d "single-line mode (end of line terminates SQL command)" - -# -# Output format options: -# - -complete -c psql -s A, -l no-align -d "unaligned table output mode" -complete -c psql -s H, -l html -d "HTML table output mode" -complete -c psql -s P, -l pset -d "set printing option VAR to ARG (see \pset command)" -complete -c psql -s t, -l tuples-only -d "print rows only" -complete -c psql -s T, -l table-attr -d "set HTML table tag attributes (e.g., width, border)" -complete -c psql -s x, -l expanded -d "turn on expanded table output" -complete -c psql -s F, -l field-separator -d "set field separator (default: '|')" -complete -c psql -s R, -l record-separator -d "set record separator (default: newline)" - - -# -# Connection options -# - -complete -c psql -s h -l host -a '(__fish_print_hostnames)' -d "database server host or socket directory" -complete -c psql -s p -l port -x -d "database server port" -complete -c psql -s U -l username -a '(__fish_complete_pg_user)' -d "database user name" -complete -c psql -s w -l no-password -d "never prompt for password" -complete -c psql -s W -l password -d "force password prompt (should happen automatically)" +# Connection options: +complete -c psql -s h -l host -x -a '(__fish_print_hostnames)' -d "Database server host or socket directory" +complete -c psql -s p -l port -x -d "Database server port" +complete -c psql -s U -l username -x -a '(__fish_complete_pg_user)' -d "Database user name" +complete -c psql -s w -l no-password -d "Never prompt for password" +complete -c psql -s W -l password -d "Force password prompt (should happen automatically)" diff --git a/share/functions/__fish_complete_pg_database.fish b/share/functions/__fish_complete_pg_database.fish new file mode 100644 index 000000000..ef5030211 --- /dev/null +++ b/share/functions/__fish_complete_pg_database.fish @@ -0,0 +1,3 @@ +function __fish_complete_pg_database + psql -AtqwlF \t 2>/dev/null | awk 'NF > 1 { print $1 }' +end diff --git a/share/functions/__fish_complete_pg_user.fish b/share/functions/__fish_complete_pg_user.fish new file mode 100644 index 000000000..4da50d538 --- /dev/null +++ b/share/functions/__fish_complete_pg_user.fish @@ -0,0 +1,3 @@ +function __fish_complete_pg_user + psql -Atqwc 'select usename from pg_user' template1 2>/dev/null +end