diff --git a/src/backend/catalog/system_views.sql b/src/backend/catalog/system_views.sql
index ed4f3f142d..82e81c1bb9 100644
--- a/src/backend/catalog/system_views.sql
+++ b/src/backend/catalog/system_views.sql
@@ -311,7 +311,8 @@ CREATE VIEW pg_cursors AS
 
 CREATE VIEW pg_available_extensions AS
     SELECT E.name, E.default_version, X.extversion AS installed_version,
-           E.comment
+           E.superuser, E.trusted, E.relocatable,
+           E.schema, E.requires, E.comment
       FROM pg_available_extensions() AS E
            LEFT JOIN pg_extension AS X ON E.name = X.extname;
 
diff --git a/src/backend/commands/extension.c b/src/backend/commands/extension.c
index b5630b4c8d..3b3a4bc330 100644
--- a/src/backend/commands/extension.c
+++ b/src/backend/commands/extension.c
@@ -1979,8 +1979,8 @@ pg_available_extensions(PG_FUNCTION_ARGS)
 		{
 			ExtensionControlFile *control;
 			char	   *extname;
-			Datum		values[3];
-			bool		nulls[3];
+			Datum		values[8];
+			bool		nulls[8];
 
 			if (!is_extension_control_filename(de->d_name))
 				continue;
@@ -2006,11 +2006,28 @@ pg_available_extensions(PG_FUNCTION_ARGS)
 				nulls[1] = true;
 			else
 				values[1] = CStringGetTextDatum(control->default_version);
+			/* superuser */
+			values[2] = BoolGetDatum(control->superuser);
+			/* trusted */
+			values[3] = BoolGetDatum(control->trusted);
+			/* relocatable */
+			values[4] = BoolGetDatum(control->relocatable);
+			/* schema */
+			if (control->schema == NULL)
+				nulls[5] = true;
+			else
+				values[5] = DirectFunctionCall1(namein,
+												CStringGetDatum(control->schema));
+			/* requires */
+			if (control->requires == NIL)
+				nulls[6] = true;
+			else
+				values[6] = convert_requires_to_datum(control->requires);
 			/* comment */
 			if (control->comment == NULL)
-				nulls[2] = true;
+				nulls[7] = true;
 			else
-				values[2] = CStringGetTextDatum(control->comment);
+				values[7] = CStringGetTextDatum(control->comment);
 
 			tuplestore_putvalues(tupstore, tupdesc, values, nulls);
 		}
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
index f48f5fb4d9..94c44acb4b 100644
--- a/src/include/catalog/pg_proc.dat
+++ b/src/include/catalog/pg_proc.dat
@@ -9678,10 +9678,12 @@
 
 # Extensions
 { oid => '3082', descr => 'list available extensions',
-  proname => 'pg_available_extensions', procost => '10', prorows => '100',
-  proretset => 't', provolatile => 's', prorettype => 'record',
-  proargtypes => '', proallargtypes => '{name,text,text}',
-  proargmodes => '{o,o,o}', proargnames => '{name,default_version,comment}',
+  proname => 'pg_available_extensions', procost => '10',
+  prorows => '100', proretset => 't', provolatile => 's',
+  prorettype => 'record', proargtypes => '',
+  proallargtypes => '{name,text,bool,bool,bool,name,_name,text}',
+  proargmodes => '{o,o,o,o,o,o,o,o}',
+  proargnames => '{name,default_version,superuser,trusted,relocatable,schema,requires,comment}',
   prosrc => 'pg_available_extensions' },
 { oid => '3083', descr => 'list available extension versions',
   proname => 'pg_available_extension_versions', procost => '10',
diff --git a/src/test/regress/expected/rules.out b/src/test/regress/expected/rules.out
index 2a18dc423e..30414a308b 100644
--- a/src/test/regress/expected/rules.out
+++ b/src/test/regress/expected/rules.out
@@ -1321,8 +1321,13 @@ pg_available_extension_versions| SELECT e.name,
 pg_available_extensions| SELECT e.name,
     e.default_version,
     x.extversion AS installed_version,
+    e.superuser,
+    e.trusted,
+    e.relocatable,
+    e.schema,
+    e.requires,
     e.comment
-   FROM (pg_available_extensions() e(name, default_version, comment)
+   FROM (pg_available_extensions() e(name, default_version, superuser, trusted, relocatable, schema, requires, comment)
      LEFT JOIN pg_extension x ON ((e.name = x.extname)));
 pg_backend_memory_contexts| SELECT pg_get_backend_memory_contexts.name,
     pg_get_backend_memory_contexts.ident,
