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,