git.postgresql.org Git - postgresql.git/commitdiff

git projects / postgresql.git / commitdiff
? search:
summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 85f6b49)
psql: Catch and report errors while printing result table
2020年3月20日 15:04:15 +0000 (16:04 +0100)
2020年3月20日 15:04:15 +0000 (16:04 +0100)
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


diff --git a/src/bin/psql/common.c b/src/bin/psql/common.c
index 67df0cd2c7764a3d4bd103a8288c3e5f88920251..396a40089ce0de7da2fc02d2d2fe169743b85ed0 100644 (file)
--- 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;
}
This is the main PostgreSQL git repository.
RSS Atom

AltStyle によって変換されたページ (->オリジナル) /