I need a way to separate the results of \watch for each query execution.
There is only a blank line between the results of \watch.
However, there is also a blank line after the title, which complicates
the rules.
My suggestion is to insert a "form feed(\f)" (preferably a newline)
before the result and output it.
Then, the output will be as follows.
# select now(); \watch 1
^L <--- add
Thu Feb 17 11:52:05 2022 (every 1s)
now
-------------------------------
2022-02-17 11:52:05.69394 + 09
(1 row)
^L <--- add
Thu Feb 17 11:52:06 2022 (every 1s)
now
------------------------------
2022-02-17 11:52:06.96906 + 09
(1 row)
(^L is usually not displayed. It is visualized by passing through a
filter such as `less`.)
This is possible with the following simple patch.
```
diff --git a/src/bin/psql/common.c b/src/bin/psql/common.c
index d65b9a124f..ee9442d0a6 100644
--- a/src/bin/psql/common.c
+++ b/src/bin/psql/common.c
@@ -646,10 +646,12 @@ PSQLexecWatch(const char *query, const
printQueryOpt *opt, FILE *printQueryFout)
switch (PQresultStatus(res))
{
case PGRES_TUPLES_OK:
+ fprintf(fout, "\f\n");
printQuery(res, opt, fout, false, pset.logfile);
break;
case PGRES_COMMAND_OK:
+ fprintf(fout, "\f\n");
fprintf(fout, "%s\n%s\n\n", opt->title, PQcmdStatus(res));
break;
```
I am developing a terminal pager ov (https://github.com/noborus/ov).
It's a generic pager, but it has features suitable for use with psql.
I found that \watch supports PAGER in PostgreSQL 15. That's great.
ov can be received and displayed, but I want to display it from the
beginning every time it is executed (like pspg).
The current output is a bit difficult to clear and display for each result.