diff --git a/src/backend/utils/mmgr/dsa.c b/src/backend/utils/mmgr/dsa.c
index 7dc43f1..f0b2a27 100644
--- a/src/backend/utils/mmgr/dsa.c
+++ b/src/backend/utils/mmgr/dsa.c
@@ -756,6 +756,22 @@ dsa_allocate(dsa_area *area, Size size)
 }
 
 /*
+ * As above, but clears allocated memory
+ */
+dsa_pointer
+dsa_allocate0(dsa_area *area, Size size)
+{
+	dsa_pointer dp;
+	char	   *object;
+
+	dp = dsa_allocate(area, size);
+	object = dsa_get_address(area, dp);
+	memset(object, 0, size);
+
+	return dp;
+}
+
+/*
  * Free memory obtained with dsa_allocate.
  */
 void
diff --git a/src/include/utils/dsa.h b/src/include/utils/dsa.h
index bb634e7..03d6a56 100644
--- a/src/include/utils/dsa.h
+++ b/src/include/utils/dsa.h
@@ -110,5 +110,6 @@ extern void dsa_free(dsa_area *area, dsa_pointer dp);
 extern void *dsa_get_address(dsa_area *area, dsa_pointer dp);
 extern void dsa_trim(dsa_area *area);
 extern void dsa_dump(dsa_area *area);
+extern dsa_pointer dsa_allocate0(dsa_area *area, Size size);
 
 #endif   /* DSA_H */
