diff --git a/src/test/isolation/isolationtester.c b/src/test/isolation/isolationtester.c
index 0164012..852ba77 100644
--- a/src/test/isolation/isolationtester.c
+++ b/src/test/isolation/isolationtester.c
@@ -455,10 +455,29 @@ run_permutation(TestSpec * testspec, int nsteps, Step ** steps)
 		else if (try_complete_step(step, STEP_NONBLOCK))
 			waiting = step;
 	}
+	for (i = 0; i < nsteps; i++)
+	{
+		Step *step = steps[i];
+
+		if (step->errormsg)
+		{
+			fprintf(stdout, "%s\n", step->errormsg);
+			free(step->errormsg);
+			step->errormsg = NULL;
+		}
+	}
 
 	/* Finish any waiting query. */
 	if (waiting != NULL)
+	{
 		try_complete_step(waiting, STEP_RETRY);
+		if (waiting->errormsg)
+		{
+			fprintf(stdout, "%s\n", waiting->errormsg);
+			free(waiting->errormsg);
+			waiting->errormsg = NULL;
+		}
+	}
 
 	/* Perform per-session teardown */
 	for (i = 0; i < testspec->nsessions; i++)
@@ -505,6 +524,9 @@ run_permutation(TestSpec * testspec, int nsteps, Step ** steps)
  * When calling this function on behalf of a given step for a second or later
  * time, pass the STEP_RETRY flag.  This only affects the messages printed.
  *
+ * If the connection returns an error, the message is saved in step->errormsg.
+ * Caller is responsible for reporting it as appropriate.
+ *
  * If the STEP_NONBLOCK flag was specified and the query is waiting to acquire
  * a lock, returns true.  Otherwise, returns false.
  */
@@ -579,9 +601,17 @@ try_complete_step(Step *step, int flags)
 				printResultSet(res);
 				break;
 			case PGRES_FATAL_ERROR:
+				if (step->errormsg != NULL)
+				{
+					printf("WARNING: this step had already emitted an error message\n");
+					printf("%s\n", step->errormsg);
+				}
 				/* Detail may contain xid values, so just show primary. */
-				printf("%s:  %s\n", PQresultErrorField(res, PG_DIAG_SEVERITY),
-					   PQresultErrorField(res, PG_DIAG_MESSAGE_PRIMARY));
+				step->errormsg = malloc(5 + strlen(PQresultErrorField(res, PG_DIAG_SEVERITY)) + 
+										strlen(PQresultErrorField(res, PG_DIAG_MESSAGE_PRIMARY)));
+				sprintf(step->errormsg, "%s:  %s",
+						PQresultErrorField(res, PG_DIAG_SEVERITY),
+						PQresultErrorField(res, PG_DIAG_MESSAGE_PRIMARY));
 				break;
 			default:
 				printf("unexpected result status: %s\n",
diff --git a/src/test/isolation/isolationtester.h b/src/test/isolation/isolationtester.h
index 377c10c..1e286df 100644
--- a/src/test/isolation/isolationtester.h
+++ b/src/test/isolation/isolationtester.h
@@ -31,6 +31,7 @@ struct Step
 	int			session;
 	char	   *name;
 	char	   *sql;
+	char	   *errormsg;
 };
 
 typedef struct
