Adding -hackers for consideration in the Commitfest. Thanks!
David J. >>>Original request by me http://www.postgresql.org/message-id/CAKFQuwZqjz-je3Z=8jdodym3jm-n2ul4cuqy5vh8n75e5v1...@mail.gmail.com When executing a query using \watch in psql the first execution of the query includes "Title is [...]" when \pset title is in use. Subsequent executions do not. Once that first display goes off-screen the information in the title is no longer readily accessible. If using \watch for a long-running monitoring query it can be helpful to incorporate some context information into the title. ---------- Forwarded message ---------- From: Michael Paquier <michael.paqu...@gmail.com> Date: Thu, Jan 28, 2016 at 6:01 AM Subject: Re: [GENERAL] Request - repeat value of \pset title during \watch interations To: "David G. Johnston" <david.g.johns...@gmail.com> Cc: Tom Lane <t...@sss.pgh.pa.us>, "pgsql-gene...@postgresql.org" < pgsql-gene...@postgresql.org> On Thu, Jan 28, 2016 at 1:54 PM, David G. Johnston <david.g.johns...@gmail.com> wrote: > On Wed, Jan 27, 2016 at 9:13 PM, Michael Paquier < michael.paqu...@gmail.com> > wrote: >> >> On Thu, Jan 28, 2016 at 9:34 AM, David G. Johnston >> <david.g.johns...@gmail.com> wrote: >> > So how about: >> > >> > + snprintf(title, strlen(myopt.title) + 50, >> > + _("Watch every %lds\t%s\t%s"), >> > + sleep, head_title, asctime(localtime(&timer))); >> >> I would just keep the timestamp and the title separated so what do you >> think about that instead? >> Watch every Xs $timestamp >> $head_title > > > That works. I like having the title immediately above the table. > > The other option that came to mind would be to place the time information > after the table display while leaving the title before it. On an output > that requires more vertical space than is available in the terminal one > would no longer have to scroll up to confirm last execution time. If doing > this I'd probably get rid of any logic that attempts to center the time > information on the table and simply leave it left-aligned. And the example: OK, attached is an updated patch. How does that look? Watch every 5s Fri Jan 29 13:06:31 2016 This is a medium length title repeat ------------------------------------------------------------ ------------------------------------------ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa (1 row)
diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c index 9750a5b..3241d27 100644 --- a/src/bin/psql/command.c +++ b/src/bin/psql/command.c @@ -3020,7 +3020,8 @@ static bool do_watch(PQExpBuffer query_buf, long sleep) { printQueryOpt myopt = pset.popt; - char title[50]; + char *title; + bool *head_title = NULL; if (!query_buf || query_buf->len <= 0) { @@ -3034,6 +3035,18 @@ do_watch(PQExpBuffer query_buf, long sleep) */ myopt.topt.pager = 0; + /* + * Take into account any title present in the user setup as a part of + * what is printed for each iteration by using it as a header. + */ + if (myopt.title) + { + title = pg_malloc(strlen(myopt.title) + 50); + head_title = pg_strdup(myopt.title); + } + else + title = pg_malloc(50); + for (;;) { int res; @@ -3045,8 +3058,13 @@ do_watch(PQExpBuffer query_buf, long sleep) * of completion of the command? */ timer = time(NULL); - snprintf(title, sizeof(title), _("Watch every %lds\t%s"), - sleep, asctime(localtime(&timer))); + if (head_title) + snprintf(title, strlen(myopt.title) + 50, + _("Watch every %lds\t%s\n%s"), + sleep, asctime(localtime(&timer)), head_title); + else + snprintf(title, 50, _("Watch every %lds\t%s"), + sleep, asctime(localtime(&timer))); myopt.title = title; /* Run the query and print out the results */ @@ -3059,7 +3077,11 @@ do_watch(PQExpBuffer query_buf, long sleep) if (res == 0) break; if (res == -1) + { + pg_free(title); + pg_free(head_title); return false; + } /* * Set up cancellation of 'watch' via SIGINT. We redo this each time @@ -3084,6 +3106,8 @@ do_watch(PQExpBuffer query_buf, long sleep) sigint_interrupt_enabled = false; } + pg_free(title); + pg_free(head_title); return true; }
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers