diff --git a/src/backend/utils/misc/ps_status.c b/src/backend/utils/misc/ps_status.c
index 0ad5e21ebe..9f6774e5f7 100644
--- a/src/backend/utils/misc/ps_status.c
+++ b/src/backend/utils/misc/ps_status.c
@@ -5,7 +5,7 @@
  * to contain some useful information. Mechanism differs wildly across
  * platforms.
  *
- * $PostgreSQL: pgsql/src/backend/utils/misc/ps_status.c,v 1.34 2007/01/05 22:19:46 momjian Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/misc/ps_status.c,v 1.35 2007/02/16 21:34:04 momjian Exp $
  *
  * Copyright (c) 2000-2007, PostgreSQL Global Development Group
  * various details abducted from various places
@@ -91,6 +91,7 @@ static const size_t ps_buffer_size = PS_BUFFER_SIZE;
 #else							/* PS_USE_CLOBBER_ARGV */
 static char *ps_buffer;			/* will point to argv area */
 static size_t ps_buffer_size;	/* space determined at run time */
+static size_t last_status_len;	/* use to minimize length of clobber */
 #endif   /* PS_USE_CLOBBER_ARGV */
 
 static size_t ps_buffer_fixed_size;		/* size of the constant prefix */
@@ -153,8 +154,8 @@ save_ps_display_args(int argc, char **argv)
 		}
 
 		ps_buffer = argv[0];
-		ps_buffer_size = end_of_area - argv[0];
-
+		last_status_len = ps_buffer_size = end_of_area - argv[0];
+		
 		/*
 		 * move the environment out of the way
 		 */
@@ -329,7 +330,10 @@ set_ps_display(const char *activity, bool force)
 
 		/* pad unused memory */
 		buflen = strlen(ps_buffer);
-		MemSet(ps_buffer + buflen, PS_PADDING, ps_buffer_size - buflen);
+		/* clobber remainder of old status string */
+		if (last_status_len > buflen)
+			MemSet(ps_buffer + buflen, PS_PADDING, last_status_len - buflen);
+		last_status_len = buflen;
 	}
 #endif   /* PS_USE_CLOBBER_ARGV */