Commit b0343699 authored by Peter Eisentraut's avatar Peter Eisentraut

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
parent 85f6b49c
...@@ -708,6 +708,7 @@ static bool ...@@ -708,6 +708,7 @@ static bool
PrintQueryTuples(const PGresult *results) PrintQueryTuples(const PGresult *results)
{ {
printQueryOpt my_popt = pset.popt; printQueryOpt my_popt = pset.popt;
bool result = true;
/* one-shot expanded output requested via \gx */ /* one-shot expanded output requested via \gx */
if (pset.g_expanded) if (pset.g_expanded)
...@@ -725,6 +726,11 @@ PrintQueryTuples(const PGresult *results) ...@@ -725,6 +726,11 @@ PrintQueryTuples(const PGresult *results)
disable_sigpipe_trap(); disable_sigpipe_trap();
printQuery(results, &my_popt, fout, false, pset.logfile); 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) if (is_pipe)
{ {
...@@ -735,9 +741,16 @@ PrintQueryTuples(const PGresult *results) ...@@ -735,9 +741,16 @@ PrintQueryTuples(const PGresult *results)
fclose(fout); fclose(fout);
} }
else else
{
printQuery(results, &my_popt, pset.queryFout, false, pset.logfile); 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;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment