Improve behavior of \watch with non-tuple-returning commands.
authorTom Lane <tgl@sss.pgh.pa.us>
Sat, 4 May 2013 20:41:22 +0000 (16:41 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Sat, 4 May 2013 20:41:22 +0000 (16:41 -0400)
Print the command tag if we get PGRES_COMMAND_OK, and throw an error for
other cases.  Per gripe from Michael Paquier.

In passing, add an fflush(), just to be real sure the output appears
before we sleep.

src/bin/psql/command.c

index 4e4c5bec7b25d0ccdc697b72e6f3c0036a653528..0e99794032822c8b830e4a5b99cb4133daea982f 100644 (file)
@@ -2648,18 +2648,33 @@ do_watch(PQExpBuffer query_buf, long sleep)
                                printQuery(res, &myopt, pset.queryFout, pset.logfile);
                                break;
 
+                       case PGRES_COMMAND_OK:
+                               fprintf(pset.queryFout, "%s\n%s\n\n", title, PQcmdStatus(res));
+                               break;
+
                        case PGRES_EMPTY_QUERY:
                                psql_error(_("\\watch cannot be used with an empty query\n"));
                                PQclear(res);
                                return false;
 
+                       case PGRES_COPY_OUT:
+                       case PGRES_COPY_IN:
+                       case PGRES_COPY_BOTH:
+                               psql_error(_("\\watch cannot be used with COPY\n"));
+                               PQclear(res);
+                               return false;
+
                        default:
-                               /* should we fail for non-tuple-result commands? */
-                               break;
+                               /* other cases should have been handled by PSQLexec */
+                               psql_error(_("unexpected result status for \\watch\n"));
+                               PQclear(res);
+                               return false;
                }
 
                PQclear(res);
 
+               fflush(pset.queryFout);
+
                /*
                 * Set up cancellation of 'watch' via SIGINT.  We redo this each time
                 * through the loop since it's conceivable something inside PSQLexec