diff --git a/src/backend/commands/extension.c b/src/backend/commands/extension.c
index ba540e3de5..48c9109c31 100644
--- a/src/backend/commands/extension.c
+++ b/src/backend/commands/extension.c
@@ -215,6 +215,28 @@ get_extension_schema(Oid ext_oid)
 	return result;
 }
 
+/*
+ * get_extension_version - given an extension OID, look up the version
+ *
+ * Returns a palloc'd string, or NULL if no such extension.
+ */
+char *
+get_extension_version(Oid ext_oid)
+{
+	char	   *result;
+	HeapTuple	tuple;
+
+	tuple = SearchSysCache1(EXTENSIONOID, ObjectIdGetDatum(ext_oid));
+
+	if (!HeapTupleIsValid(tuple))
+		return NULL;
+
+	result = pstrdup(NameStr(((Form_pg_extension) GETSTRUCT(tuple))->extversion));
+	ReleaseSysCache(tuple);
+
+	return result;
+}
+
 /*
  * Utility functions to check validity of extension and version names
  */
diff --git a/src/include/commands/extension.h b/src/include/commands/extension.h
index 0b63640512..43a55adea7 100644
--- a/src/include/commands/extension.h
+++ b/src/include/commands/extension.h
@@ -48,6 +48,7 @@ extern ObjectAddress ExecAlterExtensionContentsStmt(AlterExtensionContentsStmt *
 extern Oid	get_extension_oid(const char *extname, bool missing_ok);
 extern char *get_extension_name(Oid ext_oid);
 extern Oid	get_extension_schema(Oid ext_oid);
+extern char *get_extension_version(Oid ext_oid);
 extern bool extension_file_exists(const char *extensionName);
 
 extern ObjectAddress AlterExtensionNamespace(const char *extensionName, const char *newschema,
