On Tue, Apr 27, 2021 at 07:16:25AM +0200, Joel Jacobson wrote: > I've added a test at the end of event_trigger.sql, > reusing the three event triggers already in existence, > just before they are dropped.
Cool, thanks. I have been looking at it and I'd still like to cross-check the output data of pg_get_object_address() to see if pg_identify_object() remains consistent through it. See for example the attached that uses a trick based on LATERAL, a bit different than what's done in object_address.sql but that gives the same amount of coverage (I could also use two ROW()s and an equality, but well..). -- Michael
diff --git a/src/backend/catalog/objectaddress.c b/src/backend/catalog/objectaddress.c
index 6d88b690d8..ad9740098e 100644
--- a/src/backend/catalog/objectaddress.c
+++ b/src/backend/catalog/objectaddress.c
@@ -5607,10 +5607,7 @@ getObjectIdentityParts(const ObjectAddress *object,
{
HeapTuple tup;
Form_pg_event_trigger trigForm;
-
- /* no objname support here */
- if (objname)
- *objname = NIL;
+ char *evtname;
tup = SearchSysCache1(EVENTTRIGGEROID,
ObjectIdGetDatum(object->objectId));
@@ -5622,8 +5619,10 @@ getObjectIdentityParts(const ObjectAddress *object,
break;
}
trigForm = (Form_pg_event_trigger) GETSTRUCT(tup);
- appendStringInfoString(&buffer,
- quote_identifier(NameStr(trigForm->evtname)));
+ evtname = NameStr(trigForm->evtname);
+ appendStringInfoString(&buffer, quote_identifier(evtname));
+ if (objname)
+ *objname = list_make1(evtname);
ReleaseSysCache(tup);
break;
}
diff --git a/src/test/regress/expected/event_trigger.out b/src/test/regress/expected/event_trigger.out
index bdd0ffcdaf..1aca794d6d 100644
--- a/src/test/regress/expected/event_trigger.out
+++ b/src/test/regress/expected/event_trigger.out
@@ -533,6 +533,23 @@ DROP POLICY p2 ON event_trigger_test;
NOTICE: DROP POLICY - ddl_command_start
NOTICE: DROP POLICY - sql_drop
NOTICE: DROP POLICY - ddl_command_end
+-- Check the object address of those event triggers
+SELECT
+ e.evtname,
+ pg_describe_object('pg_event_trigger'::regclass, e.oid, 0) as descr,
+ b.type, b.object_names, b.object_args,
+ pg_identify_object(a.classid, a.objid, a.objsubid) as ident
+ FROM pg_event_trigger as e,
+ LATERAL pg_identify_object_as_address('pg_event_trigger'::regclass, e.oid, 0) as b,
+ LATERAL pg_get_object_address(b.type, b.object_names, b.object_args) as a
+ ORDER BY e.evtname;
+ evtname | descr | type | object_names | object_args | ident
+-------------------+---------------------------------+---------------+---------------------+-------------+--------------------------------------------------------
+ end_rls_command | event trigger end_rls_command | event trigger | {end_rls_command} | {} | ("event trigger",,end_rls_command,end_rls_command)
+ sql_drop_command | event trigger sql_drop_command | event trigger | {sql_drop_command} | {} | ("event trigger",,sql_drop_command,sql_drop_command)
+ start_rls_command | event trigger start_rls_command | event trigger | {start_rls_command} | {} | ("event trigger",,start_rls_command,start_rls_command)
+(3 rows)
+
DROP EVENT TRIGGER start_rls_command;
DROP EVENT TRIGGER end_rls_command;
DROP EVENT TRIGGER sql_drop_command;
diff --git a/src/test/regress/sql/event_trigger.sql b/src/test/regress/sql/event_trigger.sql
index 18b2a267cb..f7347ffbb1 100644
--- a/src/test/regress/sql/event_trigger.sql
+++ b/src/test/regress/sql/event_trigger.sql
@@ -426,6 +426,17 @@ ALTER POLICY p1 ON event_trigger_test USING (TRUE);
ALTER POLICY p1 ON event_trigger_test RENAME TO p2;
DROP POLICY p2 ON event_trigger_test;
+-- Check the object address of those event triggers
+SELECT
+ e.evtname,
+ pg_describe_object('pg_event_trigger'::regclass, e.oid, 0) as descr,
+ b.type, b.object_names, b.object_args,
+ pg_identify_object(a.classid, a.objid, a.objsubid) as ident
+ FROM pg_event_trigger as e,
+ LATERAL pg_identify_object_as_address('pg_event_trigger'::regclass, e.oid, 0) as b,
+ LATERAL pg_get_object_address(b.type, b.object_names, b.object_args) as a
+ ORDER BY e.evtname;
+
DROP EVENT TRIGGER start_rls_command;
DROP EVENT TRIGGER end_rls_command;
DROP EVENT TRIGGER sql_drop_command;
signature.asc
Description: PGP signature
