postgrespro.git / summary / log / commit / refs

commit    b03436994bcc4909dd644fd5ae6d9a9acdf30da5
Author:   Peter Eisentraut <peter@eisentraut.org>
Date:     Fri Mar 20 15:04:15 2020 +0000

    psql: Catch and report errors while printing result table
    
    Errors (for example I/O errors or disk full) while printing out result
    tables were completely ignored, which could result in silently
    truncated output in scripts, for example.  Fix by adding some basic
    error checking and reporting.
    
    Author: Daniel Verite <daniel@manitou-mail.org>
    Author: David Zhang <david.zhang@highgo.ca>
    Discussion: https://www.postgresql.org/message-id/flat/9a0b3c8d-ee14-4b1d-9d0a-2c993bdabacc@manitou-mail.org


src/bin/psql/common.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/bin/psql/common.c b/src/bin/psql/common.c index 67df0cd2c7..396a40089c 100644 --- a/src/bin/psql/common.c +++ b/src/bin/psql/common.c @@ -708,6 +708,7 @@ static bool PrintQueryTuples(const PGresult *results) { printQueryOpt my_popt = pset.popt; + bool result = true; /* one-shot expanded output requested via \gx */ if (pset.g_expanded) @@ -725,6 +726,11 @@ PrintQueryTuples(const PGresult *results) disable_sigpipe_trap(); printQuery(results, &my_popt, fout, false, pset.logfile); + if (ferror(fout)) + { + pg_log_error("could not print result table: %m"); + result = false; + } if (is_pipe) { @@ -735,9 +741,16 @@ PrintQueryTuples(const PGresult *results) fclose(fout); } else + { printQuery(results, &my_popt, pset.queryFout, false, pset.logfile); + if (ferror(pset.queryFout)) + { + pg_log_error("could not print result table: %m"); + result = false; + } + } - return true; + return result; } [parent: 85f6b49c2c53]