]> granicus.if.org Git - postgresql/commitdiff
Add new ECHO mode 'errors' that displays only failed commands in psql.
authorFujii Masao <fujii@postgresql.org>
Thu, 10 Jul 2014 05:27:54 +0000 (14:27 +0900)
committerFujii Masao <fujii@postgresql.org>
Thu, 10 Jul 2014 05:27:54 +0000 (14:27 +0900)
When the psql variable ECHO is set to 'erros', only failed SQL commands
are printed to standard error output. Also this patch adds -b option into psql.
This is equivalent to setting the variable ECHO to 'errors'.

Pavel Stehule, reviewed by Fabrízio de Royes Mello, Samrat Revagade,
Kumar Rajeev Rastogi, Abhijit Menon-Sen, and me.

doc/src/sgml/ref/psql-ref.sgml
src/bin/psql/common.c
src/bin/psql/help.c
src/bin/psql/settings.h
src/bin/psql/startup.c

index 255e8cac144434f6600034b573f5efed23232b8c..bbe59350194887b18b891483d32ad1ce66d92501 100644 (file)
@@ -72,6 +72,18 @@ PostgreSQL documentation
       </listitem>
     </varlistentry>
 
+    <varlistentry>
+      <term><option>-b</></term>
+      <term><option>--echo-errors</></term>
+      <listitem>
+      <para>
+      Print failed SQL commands to standard error output. This is
+      equivalent to setting the variable <varname>ECHO</varname> to
+      <literal>errors</literal>.
+      </para>
+      </listitem>
+    </varlistentry>
+
     <varlistentry>
       <term><option>-c <replaceable class="parameter">command</replaceable></></term>
       <term><option>--command=<replaceable class="parameter">command</replaceable></></term>
@@ -2812,7 +2824,9 @@ bar
         <literal>queries</literal>,
         <application>psql</application> merely prints all queries as
         they are sent to the server. The switch for this is
-        <option>-e</option>.
+        <option>-e</option>. If set to <literal>errors</literal> then only
+        failed queries are displayed on standard error output. The switch
+        for this is <option>-b</option>.
         </para>
         </listitem>
       </varlistentry>
index c08c81366d11775381ce27e09d2a8b252aa5ca52..676e2680af67c525ceff47b69120dabe0d9ed883 100644 (file)
@@ -995,6 +995,9 @@ SendQuery(const char *query)
                results = NULL;                 /* PQclear(NULL) does nothing */
        }
 
+       if (!OK && pset.echo == PSQL_ECHO_ERRORS)
+               psql_error("STATEMENT:  %s\n", query);
+
        /* If we made a temporary savepoint, possibly release/rollback */
        if (on_error_rollback_savepoint)
        {
index 3aa3c169c23c78517e4a5f1e77a5f8a0419c1cdc..f8f000fb50f2ca65ff253b876cbdd3c5f65d170d 100644 (file)
@@ -87,6 +87,7 @@ usage(void)
 
        printf(_("\nInput and output options:\n"));
        printf(_("  -a, --echo-all           echo all input from script\n"));
+       printf(_("  -b, --echo-errors        echo failed commands\n"));
        printf(_("  -e, --echo-queries       echo commands sent to server\n"));
        printf(_("  -E, --echo-hidden        display queries that internal commands generate\n"));
        printf(_("  -L, --log-file=FILENAME  send session log to file\n"));
index 0a60e6817b2fa9cfbbf05ab9971269e029fc7db8..453d6c889df12864808f88fe6ea131a57276dcaa 100644 (file)
@@ -31,6 +31,7 @@ typedef enum
 {
        PSQL_ECHO_NONE,
        PSQL_ECHO_QUERIES,
+       PSQL_ECHO_ERRORS,
        PSQL_ECHO_ALL
 } PSQL_ECHO;
 
index 45653a15a806a72676e97b24b0655237fe15b5a3..5a397e8d5506d7294652c2ccf0518a374211d624 100644 (file)
@@ -354,6 +354,7 @@ parse_psql_options(int argc, char *argv[], struct adhoc_opts * options)
                {"command", required_argument, NULL, 'c'},
                {"dbname", required_argument, NULL, 'd'},
                {"echo-queries", no_argument, NULL, 'e'},
+               {"echo-errors", no_argument, NULL, 'b'},
                {"echo-hidden", no_argument, NULL, 'E'},
                {"file", required_argument, NULL, 'f'},
                {"field-separator", required_argument, NULL, 'F'},
@@ -391,7 +392,7 @@ parse_psql_options(int argc, char *argv[], struct adhoc_opts * options)
 
        memset(options, 0, sizeof *options);
 
-       while ((c = getopt_long(argc, argv, "aAc:d:eEf:F:h:HlL:no:p:P:qR:sStT:U:v:VwWxXz?01",
+       while ((c = getopt_long(argc, argv, "aAbc:d:eEf:F:h:HlL:no:p:P:qR:sStT:U:v:VwWxXz?01",
                                                        long_options, &optindex)) != -1)
        {
                switch (c)
@@ -402,6 +403,9 @@ parse_psql_options(int argc, char *argv[], struct adhoc_opts * options)
                        case 'A':
                                pset.popt.topt.format = PRINT_UNALIGNED;
                                break;
+                       case 'b':
+                               SetVariable(pset.vars, "ECHO", "errors");
+                               break;
                        case 'c':
                                options->action_string = pg_strdup(optarg);
                                if (optarg[0] == '\\')
@@ -720,6 +724,8 @@ echo_hook(const char *newval)
                pset.echo = PSQL_ECHO_NONE;
        else if (strcmp(newval, "queries") == 0)
                pset.echo = PSQL_ECHO_QUERIES;
+       else if (strcmp(newval, "errors") == 0)
+               pset.echo = PSQL_ECHO_ERRORS;
        else if (strcmp(newval, "all") == 0)
                pset.echo = PSQL_ECHO_ALL;
        else