From: | David Christensen <david(at)endpoint(dot)com> |
---|---|
To: | pgsql-hackers(at)postgresql(dot)org |
Subject: | Patch: psql \whoami option |
Date: | 2010-01-26 23:24:14 |
Message-ID: | 65177326-7FBE-4DD6-83F0-3548AC0B3BA1@endpoint.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | 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 to database "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(at)endpoint(dot)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 */
From | Date | Subject | |
---|---|---|---|
Next Message | Andrew Dunstan | 2010-01-26 23:51:53 | Re: Add on_perl_init and proper destruction to plperl [PATCH] |
Previous Message | Joshua D. Drake | 2010-01-26 23:23:38 | Re: plpython3 |