diff --git a/src/interfaces/ecpg/ecpglib/error.c b/src/interfaces/ecpg/ecpglib/error.c
index cd6c6a6819..26fdcdb69e 100644
--- a/src/interfaces/ecpg/ecpglib/error.c
+++ b/src/interfaces/ecpg/ecpglib/error.c
@@ -229,18 +229,17 @@ ecpg_raise_backend(int line, PGresult *result, PGconn *conn, int compat)
 		return;
 	}
 
-	if (result)
-	{
-		sqlstate = PQresultErrorField(result, PG_DIAG_SQLSTATE);
-		if (sqlstate == NULL)
-			sqlstate = ECPG_SQLSTATE_ECPG_INTERNAL_ERROR;
-		message = PQresultErrorField(result, PG_DIAG_MESSAGE_PRIMARY);
-	}
-	else
-	{
+	/*
+	 * PQresultErrorField will return NULL if "result" is NULL, or if there is
+	 * no such field, which will happen for libpq-generated errors.  Fall back
+	 * to PQerrorMessage in such cases.
+	 */
+	sqlstate = PQresultErrorField(result, PG_DIAG_SQLSTATE);
+	if (sqlstate == NULL)
 		sqlstate = ECPG_SQLSTATE_ECPG_INTERNAL_ERROR;
+	message = PQresultErrorField(result, PG_DIAG_MESSAGE_PRIMARY);
+	if (message == NULL)
 		message = PQerrorMessage(conn);
-	}
 
 	if (strcmp(sqlstate, ECPG_SQLSTATE_ECPG_INTERNAL_ERROR) == 0)
 	{
