This is an automated email from the ASF dual-hosted git repository.

mtaha pushed a commit to branch PG16
in repository https://gitbox.apache.org/repos/asf/age.git

commit 334c85b047d4166ce0f7fad6d774d5372ede6fc1
Author: Andrey Borodin <amboro...@acm.org>
AuthorDate: Thu May 8 21:31:28 2025 +0500

    Prevent object access hook from accesing not installed namespace (#2161)
    
    Currently we cannot install Age to shared_preload_libraries if
    pg_cron is installed.
    
    To prevent following error we must bail out early.
    postgres=# set backtrace_functions to 'get_namespace_oid';
    SET
    postgres=# create extension pg_cron ;
    2025-04-15 16:59:49.867 +05 [30402] ERROR:  schema "ag_catalog" does not 
exist
    2025-04-15 16:59:49.867 +05 [30402] BACKTRACE:
            2   postgres                            0x0000000102401ab0 
get_namespace_oid + 204
            3   age.so                              0x0000000103285cd0 
ag_catalog_namespace_id + 28
            4   age.so                              0x00000001032846fc 
ag_relation_id + 32
            5   age.so                              0x00000001032efe9c 
search_label_relation_cache_miss + 84
            6   age.so                              0x00000001032efe30 
search_label_relation_cache + 100
            7   age.so                              0x00000001032842f4 
object_access + 384
            8   postgres                            0x000000010240a7a0 
RunObjectDropHook + 136
            9   postgres                            0x00000001023ee85c 
deleteOneObject + 108
            10  postgres                            0x00000001023eb860 
deleteObjectsInList + 476
            11  postgres                            0x00000001023eba14 
performMultipleDeletions + 316
            12  postgres                            0x0000000102560244 
ATPostAlterTypeCleanup + 2144
            13  postgres                            0x0000000102559fb4 
ATRewriteCatalogs + 516
            14  postgres                            0x00000001025543a8 
ATController + 284
            15  postgres                            0x00000001025541bc 
AlterTable + 96
            16  postgres                            0x00000001028b8240 
ProcessUtilitySlow + 1812
            17  postgres                            0x00000001028b600c 
standard_ProcessUtility + 3684
            18  age.so                              0x00000001032844f8 
ag_ProcessUtility_hook + 200
            19  postgres                            0x00000001028b516c 
ProcessUtility + 392
            20  postgres                            0x000000010250e5b4 
execute_sql_string + 812
            21  postgres                            0x000000010250d438 
execute_extension_script + 2264
            22  postgres                            0x000000010250b330 
ApplyExtensionUpdates + 1320
            23  postgres                            0x0000000102507954 
CreateExtensionInternal + 1896
            24  postgres                            0x0000000102506ea4 
CreateExtension + 1152
            25  postgres                            0x00000001028b8ed4 
ProcessUtilitySlow + 5032
            26  postgres                            0x00000001028b600c 
standard_ProcessUtility + 3684
            27  age.so                              0x00000001032844f8 
ag_ProcessUtility_hook + 200
            28  postgres                            0x00000001028b516c 
ProcessUtility + 392
            29  postgres                            0x00000001028b4768 
PortalRunUtility + 232
            30  postgres                            0x00000001028b3660 
PortalRunMulti + 756
            31  postgres                            0x00000001028b2abc 
PortalRun + 1008
            32  postgres                            0x00000001028ad870 
exec_simple_query + 1436
            33  postgres                            0x00000001028ac990 
PostgresMain + 2472
            34  postgres                            0x00000001027a49ac 
report_fork_failure_to_client + 0
            35  postgres                            0x00000001027a3e54 
BackendStartup + 520
            36  postgres                            0x00000001027a29f0 
ServerLoop + 812
            37  postgres                            0x000000010279fe0c 
PostmasterMain + 6484
            38  postgres                            0x000000010266acd0 
startup_hacks + 0
            39  dyld                                0x000000018a3ab154 start + 
2476
---
 src/backend/catalog/ag_catalog.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/src/backend/catalog/ag_catalog.c b/src/backend/catalog/ag_catalog.c
index 9c070fc6..edb080a5 100644
--- a/src/backend/catalog/ag_catalog.c
+++ b/src/backend/catalog/ag_catalog.c
@@ -20,6 +20,7 @@
 #include "postgres.h"
 
 #include "catalog/dependency.h"
+#include "catalog/namespace.h"
 #include "catalog/objectaccess.h"
 #include "catalog/pg_class_d.h"
 #include "catalog/pg_namespace_d.h"
@@ -176,6 +177,13 @@ static void object_access(ObjectAccessType access, Oid 
class_id, Oid object_id,
     if (access != OAT_DROP)
         return;
 
+    /*
+     * Age might be installed into shared_preload_libraries before extension is
+     * created. In this case we must bail out from this hook.
+     */
+    if (!OidIsValid(get_namespace_oid("ag_catalog", true)))
+        return;
+
     drop_arg = arg;
 
     /*

Reply via email to