diff --git a/src/backend/access/common/printtup.c b/src/backend/access/common/printtup.c
index 6ad53ddb3ca2fdea5eb4338484fd8bbd2d3a6363..1d2c6cc4f0a4bb272bfecfcf6c604363ab9d26a6 100644
--- a/src/backend/access/common/printtup.c
+++ b/src/backend/access/common/printtup.c
@@ -9,7 +9,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/access/common/printtup.c,v 1.72 2003/05/09 18:08:48 tgl Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/access/common/printtup.c,v 1.73 2003/05/13 18:39:50 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -181,6 +181,10 @@ SendRowDescriptionMessage(TupleDesc typeinfo, List *targetlist, int16 *formats)
 
 	for (i = 0; i < natts; ++i)
 	{
+		Oid		atttypid = attrs[i]->atttypid;
+		int32	atttypmod = attrs[i]->atttypmod;
+		Oid		basetype;
+
 		pq_sendstring(&buf, NameStr(attrs[i]->attname));
 		/* column ID info appears in protocol 3.0 and up */
 		if (proto >= 3)
@@ -204,14 +208,18 @@ SendRowDescriptionMessage(TupleDesc typeinfo, List *targetlist, int16 *formats)
 				pq_sendint(&buf, 0, 2);
 			}
 		}
-		pq_sendint(&buf, (int) attrs[i]->atttypid,
-				   sizeof(attrs[i]->atttypid));
-		pq_sendint(&buf, attrs[i]->attlen,
-				   sizeof(attrs[i]->attlen));
+		/* If column is a domain, send the base type and typmod instead */
+		basetype = getBaseType(atttypid);
+		if (basetype != atttypid)
+		{
+			atttypmod = get_typtypmod(atttypid);
+			atttypid = basetype;
+		}
+		pq_sendint(&buf, (int) atttypid, sizeof(atttypid));
+		pq_sendint(&buf, attrs[i]->attlen, sizeof(attrs[i]->attlen));
 		/* typmod appears in protocol 2.0 and up */
 		if (proto >= 2)
-			pq_sendint(&buf, attrs[i]->atttypmod,
-					   sizeof(attrs[i]->atttypmod));
+			pq_sendint(&buf, atttypmod, sizeof(atttypmod));
 		/* format info appears in protocol 3.0 and up */
 		if (proto >= 3)
 		{