From 918e8a48b75c0d16e2a8976e1ca78cbca66fd5de Mon Sep 17 00:00:00 2001
From: Andrey Rachitskiy <pl0h0yp1@gmail.com>
Date: Wed, 26 Aug 2026 07:49:58 +0500
Subject: [PATCH v2] Fix pg_event_trigger_ddl_commands for GRANT ON PROPERTY
 GRAPH

stringify_grant_objtype() treated OBJECT_PROPGRAPH as unused, so
pg_event_trigger_ddl_commands() failed with "unsupported object type"
when a ddl_command_end trigger inspected GRANT/REVOKE on a property
graph.  Return "PROPERTY GRAPH" like the GRANT command syntax.

BUG: 19637
Author: Andrey Rachitskiy <pl0h0yp1@gmail.com>
Reported-by: Alexander Lakhin <exclusion@gmail.com>
Reviewed-by: Fujii Masao <masao.fujii@gmail.com>
Discussion: https://postgr.es/m/19637-4446f72945492ed8@postgresql.org
---
 src/backend/commands/event_trigger.c        |  3 ++-
 src/test/regress/expected/event_trigger.out | 18 ++++++++++++++----
 src/test/regress/sql/event_trigger.sql      |  8 ++++++--
 3 files changed, 22 insertions(+), 7 deletions(-)

diff --git a/src/backend/commands/event_trigger.c b/src/backend/commands/event_trigger.c
index adc6eabc0f4..4edc83cdf7d 100644
--- a/src/backend/commands/event_trigger.c
+++ b/src/backend/commands/event_trigger.c
@@ -2288,6 +2288,8 @@ stringify_grant_objtype(ObjectType objtype)
 			return "PARAMETER";
 		case OBJECT_PROCEDURE:
 			return "PROCEDURE";
+		case OBJECT_PROPGRAPH:
+			return "PROPERTY GRAPH";
 		case OBJECT_ROUTINE:
 			return "ROUTINE";
 		case OBJECT_TABLESPACE:
@@ -2315,7 +2317,6 @@ stringify_grant_objtype(ObjectType objtype)
 		case OBJECT_OPERATOR:
 		case OBJECT_OPFAMILY:
 		case OBJECT_POLICY:
-		case OBJECT_PROPGRAPH:
 		case OBJECT_PUBLICATION:
 		case OBJECT_PUBLICATION_NAMESPACE:
 		case OBJECT_PUBLICATION_REL:
diff --git a/src/test/regress/expected/event_trigger.out b/src/test/regress/expected/event_trigger.out
index 86ae50ce531..8e8310ff34d 100644
--- a/src/test/regress/expected/event_trigger.out
+++ b/src/test/regress/expected/event_trigger.out
@@ -191,10 +191,6 @@ CREATE PROPERTY GRAPH gx
 NOTICE:  test_event_trigger: ddl_command_end CREATE PROPERTY GRAPH
 ALTER PROPERTY GRAPH gx ALTER EDGE TABLE te1 ALTER LABEL e1 DROP PROPERTIES (p1);
 NOTICE:  test_event_trigger: ddl_command_end ALTER PROPERTY GRAPH
-DROP PROPERTY GRAPH gx;
-NOTICE:  test_event_trigger: ddl_command_end DROP PROPERTY GRAPH
-DROP TABLE tv1, tv2, te1;
-NOTICE:  test_event_trigger: ddl_command_end DROP TABLE
 -- alter owner to non-superuser should fail
 alter event trigger regress_event_trigger owner to regress_evt_user;
 ERROR:  permission denied to change owner of event trigger "regress_event_trigger"
@@ -434,6 +430,20 @@ BEGIN
 END; $$;
 CREATE EVENT TRIGGER regress_event_trigger_report_end ON ddl_command_end
   EXECUTE PROCEDURE event_trigger_report_end();
+-- GRANT/REVOKE ON PROPERTY GRAPH with pg_event_trigger_ddl_commands()
+GRANT SELECT ON PROPERTY GRAPH gx TO public;
+NOTICE:  END: command_tag=GRANT type=PROPERTY GRAPH identity=<NULL>
+REVOKE SELECT ON PROPERTY GRAPH gx FROM public;
+NOTICE:  END: command_tag=REVOKE type=PROPERTY GRAPH identity=<NULL>
+DROP PROPERTY GRAPH gx;
+NOTICE:  NORMAL: orig=t normal=f istemp=f type=property graph identity=public.gx schema=public name=gx addr={public,gx} args={}
+NOTICE:  NORMAL: orig=f normal=t istemp=f type=property graph element identity=te1 of property graph public.gx schema=<NULL> name=<NULL> addr={public,gx,te1} args={}
+DROP TABLE tv1, tv2, te1;
+NOTICE:  NORMAL: orig=t normal=f istemp=f type=table identity=public.te1 schema=public name=te1 addr={public,te1} args={}
+NOTICE:  NORMAL: orig=t normal=f istemp=f type=table identity=public.tv2 schema=public name=tv2 addr={public,tv2} args={}
+NOTICE:  NORMAL: orig=f normal=t istemp=f type=table constraint identity=te1_b_fkey on public.te1 schema=public name=<NULL> addr={public,te1,te1_b_fkey} args={}
+NOTICE:  NORMAL: orig=t normal=f istemp=f type=table identity=public.tv1 schema=public name=tv1 addr={public,tv1} args={}
+NOTICE:  NORMAL: orig=f normal=t istemp=f type=table constraint identity=te1_a_fkey on public.te1 schema=public name=<NULL> addr={public,te1,te1_a_fkey} args={}
 CREATE SCHEMA evttrig
 	CREATE TABLE one (col_a SERIAL PRIMARY KEY, col_b text DEFAULT 'forty two', col_c SERIAL)
 	CREATE INDEX one_idx ON one (col_b)
diff --git a/src/test/regress/sql/event_trigger.sql b/src/test/regress/sql/event_trigger.sql
index d0e6ba295fe..bbdac7db984 100644
--- a/src/test/regress/sql/event_trigger.sql
+++ b/src/test/regress/sql/event_trigger.sql
@@ -155,8 +155,6 @@ CREATE PROPERTY GRAPH gx
   EDGE TABLES (te1 SOURCE tv1 DESTINATION tv2 LABEL e1 PROPERTIES (q as p1));
 
 ALTER PROPERTY GRAPH gx ALTER EDGE TABLE te1 ALTER LABEL e1 DROP PROPERTIES (p1);
-DROP PROPERTY GRAPH gx;
-DROP TABLE tv1, tv2, te1;
 
 -- alter owner to non-superuser should fail
 alter event trigger regress_event_trigger owner to regress_evt_user;
@@ -335,6 +333,12 @@ END; $$;
 CREATE EVENT TRIGGER regress_event_trigger_report_end ON ddl_command_end
   EXECUTE PROCEDURE event_trigger_report_end();
 
+-- GRANT/REVOKE ON PROPERTY GRAPH with pg_event_trigger_ddl_commands()
+GRANT SELECT ON PROPERTY GRAPH gx TO public;
+REVOKE SELECT ON PROPERTY GRAPH gx FROM public;
+DROP PROPERTY GRAPH gx;
+DROP TABLE tv1, tv2, te1;
+
 CREATE SCHEMA evttrig
 	CREATE TABLE one (col_a SERIAL PRIMARY KEY, col_b text DEFAULT 'forty two', col_c SERIAL)
 	CREATE INDEX one_idx ON one (col_b)
-- 
2.53.0

