Patch: psql \whoami option - Mailing list pgsql-hackers

From David Christensen
Subject Patch: psql \whoami option
Date
Msg-id 65177326-7FBE-4DD6-83F0-3548AC0B3BA1@endpoint.com
Whole thread Raw
Responses Re: Patch: psql \whoami option  (Josh Berkus <josh@agliodbs.com>)
Re: Patch: psql \whoami option  (Bruce Momjian <bruce@momjian.us>)
Re: Patch: psql \whoami option  (Steve Singer <ssinger_pg@sympatico.ca>)
List pgsql-hackers
-hackers,

In the spirit of small, but hopefully useful interface improvement  
patches, enclosed for your review is a patch for providing psql with a  
\whoami command (maybe a better name is \conninfo or similar).  Its  
purpose is to print information about the current connection, by  
default in a human-readable format.  There is also an optional format  
parameter which currently accepts 'dsn' as an option to output the  
current connection information as a DSN.

Example output:
  $psql -d postgres -p 8555  psql (8.5devel)  You are now connected to database "postgres".
  [Tue Jan 26 17:17:31 CST 2010]  machack:postgres:8555=# \whoami  Connected to database: "postgres", user: "machack",
port:"8555"  
 
via local domain socket
  [Tue Jan 26 17:17:34 CST 2010]  machack:postgres:8555=# \c - - localhost 8555  psql (8.5devel)  You are now connected
todatabase "postgres" on host "localhost".
 
  [Tue Jan 26 17:17:42 CST 2010]  machack:postgres:8555=# \whoami  Connected to database: "postgres", user: "machack",
host: 
 
"localhost", port: "8555"
  [Tue Jan 26 17:17:46 CST 2010]  machack:postgres:8555=# \whoami dsn
dbname=postgres;user=machack;host=localhost;port=8555
  [Tue Jan 26 17:19:02 CST 2010]  machack:postgres:8555=# \q

Regards,

David
--
David Christensen
End Point Corporation
david@endpoint.com



diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql- 
ref.sgml
index 3ce5996..b58b24d 100644
*** a/doc/src/sgml/ref/psql-ref.sgml
--- b/doc/src/sgml/ref/psql-ref.sgml
*************** lo_import 152801
*** 2149,2154 ****
--- 2149,2167 ----

        <varlistentry>
+         <term><literal>\whoami</literal> [ <replaceable  
class="parameter">default</replaceable> | <replaceable  
class="parameter">dsn</replaceable> ] </term>
+         <listitem>
+         <para>
+         Outputs connection information about the current database
+         connection.  When passed parameter <literal>dsn</literal>,
+         outputs as a DSN.  If parameter is unspecified or
+         unrecognized, outputs in a human-readable format.
+         </para>
+         </listitem>
+       </varlistentry>
+
+
+       <varlistentry>          <term><literal>\x</literal></term>          <listitem>          <para>
diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c
index 5188b18..21b2468 100644
*** a/src/bin/psql/command.c
--- b/src/bin/psql/command.c
*************** exec_command(const char *cmd,
*** 1106,1111 ****
--- 1106,1156 ----          free(fname);      }

+     /* \whoami -- display information about the current connection    */
+     else if (strcmp(cmd, "whoami") == 0)
+     {
+         char       *format = psql_scan_slash_option(scan_state,
+                                                     OT_NORMAL, NULL, true);
+         char       *host = PQhost(pset.db);
+
+         if (format && !pg_strcasecmp(format, "dsn")) {
+             if (host) {
+                 printf("dbname=%s;user=%s;host=%s;port=%s\n",
+                        PQdb(pset.db),
+                        PQuser(pset.db),
+                        host,
+                        PQport(pset.db)
+                     );
+             }
+             else {
+                 printf("dbname=%s;user=%s;port=%s\n",
+                        PQdb(pset.db),
+                        PQuser(pset.db),
+                        PQport(pset.db)
+                     );
+             }
+         }
+         else {
+             /* default case */
+             if (host) {
+                 printf("Connected to database: \"%s\", user: \"%s\", host: \"%s 
\", port: \"%s\"\n",
+                        PQdb(pset.db),
+                        PQuser(pset.db),
+                        host,
+                        PQport(pset.db)
+                     );
+             }
+             else {
+                 printf("Connected to database: \"%s\", user: \"%s\", port: \"%s 
\" via local domain socket\n",
+                        PQdb(pset.db),
+                        PQuser(pset.db),
+                        PQport(pset.db)
+                     );
+             }
+         }
+         free(format);
+     }
+      /* \x -- toggle expanded table representation */      else if (strcmp(cmd, "x") == 0)      {
diff --git a/src/bin/psql/help.c b/src/bin/psql/help.c
index 6037351..802b76d 100644
*** a/src/bin/psql/help.c
--- b/src/bin/psql/help.c
*************** slashUsage(unsigned short int pager)
*** 249,254 ****
--- 249,256 ----              PQdb(pset.db));      fprintf(output, _("  \\encoding [ENCODING]   show or set client  
encoding\n"));      fprintf(output, _("  \\password [USERNAME]   securely change the  
password for a user\n"));
+     fprintf(output, _("  \\whoami [FORMAT]       display information  
about current connection\n"
+                       "                         (FORMAT := {default| 
dsn})\n"));      fprintf(output, "\n");
      fprintf(output, _("Operating System\n"));
diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c
index cb2ae9a..952d2bc 100644
*** a/src/bin/psql/tab-complete.c
--- b/src/bin/psql/tab-complete.c
*************** psql_completion(char *text, int start, i
*** 635,641 ****          "\\lo_import", "\\lo_export", "\\lo_list", "\\lo_unlink",          "\\o", "\\p",
"\\password","\\prompt", "\\pset", "\\q", "\ 
 
\qecho", "\\r",          "\\set", "\\t", "\\T",
!         "\\timing", "\\unset", "\\x", "\\w", "\\z", "\\!", NULL      };
      (void) end;                    /* not used */
--- 635,641 ----          "\\lo_import", "\\lo_export", "\\lo_list", "\\lo_unlink",          "\\o", "\\p",
"\\password","\\prompt", "\\pset", "\\q", "\ 
 
\qecho", "\\r",          "\\set", "\\t", "\\T",
!         "\\timing", "\\unset", "\\x", "\\w", "\\whoami", "\\z", "\\!", NULL      };
      (void) end;                    /* not used */



pgsql-hackers by date:

Previous
From: "Joshua D. Drake"
Date:
Subject: Re: plpython3
Next
From: Andrew Dunstan
Date:
Subject: Re: Add on_perl_init and proper destruction to plperl [PATCH]