Index: pgadmin/include/schema/gpPartition.h
===================================================================
--- pgadmin/include/schema/gpPartition.h	(revision 7826)
+++ pgadmin/include/schema/gpPartition.h	(working copy)
@@ -38,6 +38,11 @@
     wxMenu * GetNewMenu();
     wxString GetSql(ctlTree *browser);
     pgObject *Refresh(ctlTree *browser, const wxTreeItemId item);
+    wxString GetPartitionName() { return partitionname; }
+    void iSetPartitionName(const wxString& pn) { partitionname = pn; }
+
+private:
+    wxString partitionname;
 };
 
 
Index: pgadmin/frm/frmStatus.cpp
===================================================================
--- pgadmin/frm/frmStatus.cpp	(revision 7826)
+++ pgadmin/frm/frmStatus.cpp	(working copy)
@@ -602,8 +602,14 @@
     logFmtPos=logFormat.Find('%', true);
 
     if (logFmtPos < 0)
+        logFormatKnown = true;  // log_line_prefix not specified.
+    else if (!logFmtPos && logFormat.Mid(logFmtPos, 2) == wxT("%t") && logFormat.Length() > 2)  // Timestamp at end of log_line_prefix?
+    {
         logFormatKnown = true;
-    else if (!logFmtPos && logFormat.Mid(logFmtPos, 2) == wxT("%t") && logFormat.Length() > 2)
+        logHasTimestamp = true;
+        logList->AddColumn(_("Timestamp"), 100);
+    }
+    else if (connection->GetIsGreenplum())
     {
         logFormatKnown = true;
         logHasTimestamp = true;
@@ -1495,26 +1501,82 @@
         logList->AppendItem(-1, str);
     else
     {
-        if (str.Find(':') < 0)
+        if (connection->GetIsGreenplum() && connection->BackendMinimumVersion(8, 2, 13))
         {
-            logList->InsertItem(row, wxEmptyString, -1);
-            logList->SetItem(row, (logHasTimestamp ? 2 : 1), str);
+            // Greenplum 3.3 release and later:  log is in CSV format
+
+            if (!formatted)
+            {
+                logList->InsertItem(row, wxEmptyString, -1);
+                logList->SetItem(row, 1, str.BeforeFirst(':'));
+                logList->SetItem(row, 2, str.AfterFirst(':').Mid(2));
+            }
+            else
+            {
+                wxString ts = str.BeforeFirst(',');
+                if (ts.Length() < 20 || ts[0] != wxT('2') || ts[1] != wxT('0'))
+                {
+                    // Log line not a timestamp... Must be a continuation of the previous line.
+                    logList->InsertItem(row, wxEmptyString, -1);
+                    logList->SetItem(row, 2, str);
+                }
+                else
+                {
+                    logList->InsertItem(row, ts, -1);   // Insert timestamp
+                    // Find loglevel... This needs work.  Better than nothing for beta 3.
+                    wxString loglevel = str.AfterFirst('\"').BeforeFirst('\"');
+                    if (str.Find(wxT(",\"LOG\",")) > 0)
+                        loglevel = wxT("LOG");
+                    if (str.Find(wxT(",\"NOTICE\",")) > 0)
+                        loglevel = wxT("NOTICE");
+                    if (str.Find(wxT(",\"WARNING\",")) > 0)
+                        loglevel = wxT("WARNING");
+                    if (str.Find(wxT(",\"ERROR\",")) > 0)
+                        loglevel = wxT("ERROR");
+                    if (str.Find(wxT(",\"FATAL\",")) > 0)
+                        loglevel = wxT("FATAL");
+                    if (str.Find(wxT(",\"PANIC\",")) > 0)
+                        loglevel = wxT("PANIC");
+                    if (str.Find(wxT(",\"DEBUG")) > 0)
+                        loglevel = wxT("DEBUG");
+                    if (loglevel[0] >= wxT('D') && loglevel[0] <= wxT('W'))
+                    {
+                        logList->SetItem(row, 1, loglevel);
+                        logList->SetItem(row, 2, str.AfterFirst(','));
+                    }
+                    else
+                        logList->SetItem(row, 2, str.AfterFirst(','));
+                }
+            }
         }
-        else
+        else if (connection->GetIsGreenplum())
         {
-            wxString rest;
+            // Greenplum 3.2 and before.
 
-            if (logHasTimestamp)
+            if (str.Find(':') < 0)
             {
+                // Must be a continuation of a previous line.
+                logList->InsertItem(row, wxEmptyString, -1);
+                logList->SetItem(row, 2, str);
+            }
+            else
+            {
+                wxString rest;
                 if (formatted)
                 {
-                    rest = str.Mid(logFmtPos + 22).AfterFirst(':');
-                    wxString ts=str.Mid(logFmtPos, str.Length()-rest.Length() - logFmtPos -1);
-
-                    int pos = ts.Find(logFormat.c_str()[logFmtPos+2], true);
-                    logList->InsertItem(row, ts.Left(pos), -1);
-                    logList->SetItem(row, 1, ts.Mid(pos + logFormat.Length() - logFmtPos -2));
-                    logList->SetItem(row, 2, rest.Mid(2));
+                    wxString ts = str.BeforeFirst(logFormat.c_str()[logFmtPos+2]);
+                    if (ts.Length() < 20  || ts.Left(2) != wxT("20") || str.Find(':') < 0)
+                    {
+                        // No Timestamp?  Must be a continuation of a previous line.
+                        logList->InsertItem(row, wxEmptyString, -1);
+                        logList->SetItem(row, 2, str);
+                    }
+                    else
+                    {
+                        logList->InsertItem(row, ts, -1);
+                        rest = str.Mid(logFmtPos + ts.Length()).AfterFirst(':');
+                        logList->SetItem(row, 2, rest);   
+                    }
                 }
                 else
                 {
@@ -1523,21 +1585,56 @@
                     logList->SetItem(row, 2, str.AfterFirst(':').Mid(2));
                 }
             }
+            
+        }
+        else
+        {
+            // All Non-GPDB PostgreSQL systems.
+
+            if (str.Find(':') < 0)
+            {
+                logList->InsertItem(row, wxEmptyString, -1);
+                logList->SetItem(row, (logHasTimestamp ? 2 : 1), str);
+            }
             else
             {
-                if (formatted)
-                    rest = str.Mid(logFormat.Length());
-                else
-                    rest = str;
+                wxString rest;
 
-                int pos = rest.Find(':');
+                if (logHasTimestamp)
+                {
+                    if (formatted)
+                    {
+                        rest = str.Mid(logFmtPos + 22).AfterFirst(':');
+                        wxString ts=str.Mid(logFmtPos, str.Length()-rest.Length() - logFmtPos -1);
 
-                if (pos < 0)
-                    logList->InsertItem(row, rest, -1);
+                        int pos = ts.Find(logFormat.c_str()[logFmtPos+2], true);
+                        logList->InsertItem(row, ts.Left(pos), -1);
+                        logList->SetItem(row, 1, ts.Mid(pos + logFormat.Length() - logFmtPos -2));
+                        logList->SetItem(row, 2, rest.Mid(2));
+                    }
+                    else
+                    {
+                        logList->InsertItem(row, wxEmptyString, -1);
+                        logList->SetItem(row, 1, str.BeforeFirst(':'));
+                        logList->SetItem(row, 2, str.AfterFirst(':').Mid(2));
+                    }
+                }
                 else
                 {
-                    logList->InsertItem(row, rest.BeforeFirst(':'), -1);
-                    logList->SetItem(row, 1, rest.AfterFirst(':').Mid(2));
+                    if (formatted)
+                        rest = str.Mid(logFormat.Length());
+                    else
+                        rest = str;
+
+                    int pos = rest.Find(':');
+
+                    if (pos < 0)
+                        logList->InsertItem(row, rest, -1);
+                    else
+                    {
+                        logList->InsertItem(row, rest.BeforeFirst(':'), -1);
+                        logList->SetItem(row, 1, rest.AfterFirst(':').Mid(2));
+                    }
                 }
             }
         }
Index: pgadmin/schema/gpPartition.cpp
===================================================================
--- pgadmin/schema/gpPartition.cpp	(revision 7826)
+++ pgadmin/schema/gpPartition.cpp	(working copy)
@@ -109,7 +109,7 @@
 	pgSet *tables;
 
 	query= wxT("SELECT rel.oid, relname, rel.reltablespace AS spcoid, spcname, pg_get_userbyid(relowner) AS relowner, relacl, relhasoids, ")
-		wxT("relhassubclass, reltuples, description, conname, conkey,\n")
+		wxT("relhassubclass, reltuples, description, conname, conkey, parname, \n")
 		wxT("       EXISTS(select 1 FROM pg_trigger\n")
 		wxT("                       JOIN pg_proc pt ON pt.oid=tgfoid AND pt.proname='logtrigger'\n")
 		wxT("                       JOIN pg_proc pc ON pc.pronamespace=pt.pronamespace AND pc.proname='slonyversion'\n")
@@ -129,11 +129,13 @@
 
 
 	query += wxT("  FROM pg_class rel JOIN pg_partition_rule pr ON(rel.oid = pr.parchildrelid) JOIN pg_partition p ON (pr.paroid = p.oid)\n")
+        wxT("  JOIN pg_inherits i ON (rel.oid = i.inhrelid) \n")
 		wxT("  LEFT OUTER JOIN pg_tablespace ta on ta.oid=rel.reltablespace\n")
 		wxT("  LEFT OUTER JOIN pg_description des ON (des.objoid=rel.oid AND des.objsubid=0)\n")
 		wxT("  LEFT OUTER JOIN pg_constraint c ON c.conrelid=rel.oid AND c.contype='p'\n");
 	query += wxT("  LEFT OUTER JOIN gp_distribution_policy gpd ON gpd.localoid=rel.oid\n");
-	query += wxT(" WHERE relkind = 'r' AND p.parrelid = ") + collection->GetOidStr() + wxT("\n");
+	query += wxT(" WHERE relkind = 'r' ");
+    query += wxT(" AND i.inhparent = ") + collection->GetOidStr() + wxT("\n"); 
 
 	query += restriction + 
 		wxT(" ORDER BY relname");
@@ -167,6 +169,7 @@
 			table->iSetFillFactor(tables->GetVal(wxT("fillfactor")));
 
 			table->iSetHasSubclass(tables->GetBool(wxT("relhassubclass")));
+            table->iSetPartitionName(tables->GetVal(wxT("parname")));
 			table->iSetPrimaryKeyName(tables->GetVal(wxT("conname")));
 			table->iSetIsReplicated(tables->GetBool(wxT("isrepl")));
 			wxString cn=tables->GetVal(wxT("conkey"));
