diff --git a/src/backend/utils/adt/xml.c b/src/backend/utils/adt/xml.c
index d5d48d5c060e18e20c40cab65a10b54158a4976a..9c5daec31e96543b75bbe1a654f31a5e01c0fb74 100644
--- a/src/backend/utils/adt/xml.c
+++ b/src/backend/utils/adt/xml.c
@@ -2001,6 +2001,12 @@ map_sql_value_to_xml_value(Datum value, Oid type, bool xml_escape_strings)
 		bool		isvarlena;
 		char	   *str;
 
+		/*
+		 * Flatten domains; the special-case treatments below should apply
+		 * to, eg, domains over boolean not just boolean.
+		 */
+		type = getBaseType(type);
+
 		/*
 		 * Special XSD formatting for some data types
 		 */