diff --git a/src/include/port.h b/src/include/port.h
index 71113c03944bd7f88991ef9953ae4ea15e86f443..f9b4a16c0af647d028fb240ff14cbcc2773b8440 100644
--- a/src/include/port.h
+++ b/src/include/port.h
@@ -139,6 +139,9 @@ extern unsigned char pg_ascii_tolower(unsigned char ch);
 #ifdef snprintf
 #undef snprintf
 #endif
+#ifdef vsprintf
+#undef vsprintf
+#endif
 #ifdef sprintf
 #undef sprintf
 #endif
@@ -154,6 +157,7 @@ extern unsigned char pg_ascii_tolower(unsigned char ch);
 
 extern int	pg_vsnprintf(char *str, size_t count, const char *fmt, va_list args);
 extern int	pg_snprintf(char *str, size_t count, const char *fmt,...) pg_attribute_printf(3, 4);
+extern int	pg_vsprintf(char *str, const char *fmt, va_list args);
 extern int	pg_sprintf(char *str, const char *fmt,...) pg_attribute_printf(2, 3);
 extern int	pg_vfprintf(FILE *stream, const char *fmt, va_list args);
 extern int	pg_fprintf(FILE *stream, const char *fmt,...) pg_attribute_printf(2, 3);
@@ -167,6 +171,7 @@ extern int	pg_printf(const char *fmt,...) pg_attribute_printf(1, 2);
 #ifdef __GNUC__
 #define vsnprintf(...)	pg_vsnprintf(__VA_ARGS__)
 #define snprintf(...)	pg_snprintf(__VA_ARGS__)
+#define vsprintf(...)	pg_vsprintf(__VA_ARGS__)
 #define sprintf(...)	pg_sprintf(__VA_ARGS__)
 #define vfprintf(...)	pg_vfprintf(__VA_ARGS__)
 #define fprintf(...)	pg_fprintf(__VA_ARGS__)
@@ -174,6 +179,7 @@ extern int	pg_printf(const char *fmt,...) pg_attribute_printf(1, 2);
 #else
 #define vsnprintf		pg_vsnprintf
 #define snprintf		pg_snprintf
+#define vsprintf		pg_vsprintf
 #define sprintf			pg_sprintf
 #define vfprintf		pg_vfprintf
 #define fprintf			pg_fprintf
diff --git a/src/port/snprintf.c b/src/port/snprintf.c
index 166374cabd6b7bf4a4b70afe5685f17b366ce231..0c779a601fcfc93b723f1a696adce8923565fde3 100644
--- a/src/port/snprintf.c
+++ b/src/port/snprintf.c
@@ -99,6 +99,7 @@
 /* Prevent recursion */
 #undef	vsnprintf
 #undef	snprintf
+#undef	vsprintf
 #undef	sprintf
 #undef	vfprintf
 #undef	fprintf
@@ -178,7 +179,7 @@ pg_snprintf(char *str, size_t count, const char *fmt,...)
 	return len;
 }
 
-static int
+int
 pg_vsprintf(char *str, const char *fmt, va_list args)
 {
 	PrintfTarget target;