From d5cfe39a5458f18ddb85ee10549a265c39a30a8c Mon Sep 17 00:00:00 2001 From: Yurii Rashkovskii Date: Fri, 18 Apr 2025 17:54:58 -0700 Subject: [PATCH] pg_creating_extension() to inspect if an extension is being created. This allows for much better control of what data is subject to `pg_extension_config_dump` as such data provenance can be established using this function. --- src/backend/commands/extension.c | 10 ++++++++++ src/include/catalog/pg_proc.dat | 5 +++++ 2 files changed, 15 insertions(+) diff --git a/src/backend/commands/extension.c b/src/backend/commands/extension.c index e6f9ab6dfd66..8bbb5f83818c 100644 --- a/src/backend/commands/extension.c +++ b/src/backend/commands/extension.c @@ -3904,3 +3904,13 @@ find_in_paths(const char *basename, List *paths) return NULL; } + +Datum +pg_creating_extension(PG_FUNCTION_ARGS) +{ + if (creating_extension) + { + PG_RETURN_OID(CurrentExtensionObject); + } + PG_RETURN_NULL(); +} diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat index 118d6da1ace0..61705cab26cc 100644 --- a/src/include/catalog/pg_proc.dat +++ b/src/include/catalog/pg_proc.dat @@ -10745,6 +10745,11 @@ proname => 'pg_extension_config_dump', provolatile => 'v', proparallel => 'u', prorettype => 'void', proargtypes => 'regclass text', prosrc => 'pg_extension_config_dump' }, +{ oid => '3814', + descr => 'determine if an extension is currently being created', + proname => 'pg_creating_extension', provolatile => 'v', proparallel => 'u', + prorettype => 'oid', proargtypes => '', + prosrc => 'pg_creating_extension' }, # SQL-spec window functions { oid => '3100', descr => 'row number within partition',