In event triggers, use "pg_temp" only for our own temp schema.
authorTom Lane <tgl@sss.pgh.pa.us>
Tue, 27 Jul 2021 16:08:20 +0000 (12:08 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Tue, 27 Jul 2021 16:08:20 +0000 (12:08 -0400)
pg_event_trigger_ddl_commands used "pg_temp" to refer to any
temp schema, not only that of the current backend.  This seems
like overreach.  It's somewhat unlikely that DDL commands would
refer to temp objects of other sessions to begin with, but if they
do, "pg_temp" would be a most misleading way to display the action.

While this seems like a bug, it's not quite out of the realm of
possibility that somebody out there is expecting the current
behavior.  Hence, fix in HEAD, but don't back-patch.

Discussion: https://postgr.es/m/CAAJ_b97W=QaGmag9AhWNbmx3uEYsNkXWL+OVW1_E1D3BtgWvtw@mail.gmail.com

src/backend/commands/event_trigger.c

index 9c31c9e76372e6d0b542d35df28229c6bdd6012a..71612d577e911b4a84a0e270751e43164a61d649 100644 (file)
@@ -1982,11 +1982,7 @@ pg_event_trigger_ddl_commands(PG_FUNCTION_ARGS)
                                elog(ERROR,
                                     "invalid null namespace in object %u/%u/%d",
                                     addr.classId, addr.objectId, addr.objectSubId);
-                           /* XXX not quite get_namespace_name_or_temp */
-                           if (isAnyTempNamespace(schema_oid))
-                               schema = pstrdup("pg_temp");
-                           else
-                               schema = get_namespace_name(schema_oid);
+                           schema = get_namespace_name_or_temp(schema_oid);
 
                            table_close(catalog, AccessShareLock);
                        }