From 1954ffc0dad2507408702ca12092abc4e5b8f45a Mon Sep 17 00:00:00 2001
From: Yurii Rashkovskii <yrashk@gmail.com>
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 180f4af9be3..fcac8226c53 100644
--- a/src/backend/commands/extension.c
+++ b/src/backend/commands/extension.c
@@ -3863,3 +3863,13 @@ new_ExtensionControlFile(const char *extname)
 
 	return control;
 }
+
+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 62beb71da28..c75cc39f5fe 100644
--- a/src/include/catalog/pg_proc.dat
+++ b/src/include/catalog/pg_proc.dat
@@ -10727,6 +10727,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',
-- 
2.43.2

