On Wed, May 06, 2026 at 10:38:32AM +0800, Alex Guo wrote:
> On 5/5/26 2:00 PM, Bertrand Drouvot wrote:
>> On Thu, Apr 30, 2026 at 06:01:22PM +0530, Ashutosh Bapat wrote:
>>> I think we should just eliminate it
>>> from the result just like we are eliminating the rule. There is slight
>>> convenience in keeping the query as is - it need not change even
>>> though the columns returned by the function change and it's more
>>> readable. I also think that we don't need a type defined for a
>>> property graph - it doesn't contain any row as well as the shape of
>>> the result of GRAPH_TABLE depends upon the COLUMNS clause - so that's
>>> not fixed as well. I will start a separate thread for that
>>> discussion.
>>
>> Yeah, now that 891a57c7394 is in, PFA a new version of the patch. This is 
>> just
>> a mandatory rebase and the COLLATE "C" removals.

In order to move the needle, I have applied the simplification of
getObjectDescription() as an independent piece.

Label properties lead to part descriptions like that:
+ property graph label property |        |      | k1 of e of e of
create_property_graph_tests.gt
+ property graph label property |        |      | k2 of e of e of
create_property_graph_tests.gt

This is confusing and hard to act on for the reader, with the same
object name defined twice (worse matter: twice in a row).  For the
reader, is the first "e" something different than the second?  Do both
refer to the same object?  Do they refer to different sub-objects
instead but named the same because the implementation dictates so?
This could gain in clarity.

This has been mentioned upthread.  But, while reviewing the rest, I am
really puzzled by your choice of "property graph element label
property" over "property graph label property", which is inconsistent
with the catalog description.  We usually try to be careful about the
wordings of the descriptions with the statis data in objectaddress.c,
and the extra "element" feels out of place to me.

I'll let Peter comment about these points, but it really looks like
the intention of the catalog leads to a result closer to the attached
(leaving the label property description aside for a minute).

Attaching a rebased v7 with the remaining pieces.
--
Michael
From 0beda6b3613b05616988caa854fcbc45feeaf55b Mon Sep 17 00:00:00 2001
From: Michael Paquier <[email protected]>
Date: Thu, 7 May 2026 10:45:12 +0900
Subject: [PATCH v7] Handle element label and element label property objects in
 object address functions

getObjectTypeDescription() and getObjectIdentityParts() do not handle objects in
pg_propgraph_element_label and pg_propgraph_label_property catalogs. These
functions when called for handling a DDL that affects these objects causes
"unsupported object class" error. An error is reported when these functions are
called when pg_identify_object() and pg_identify_object_as_address() are invoked
with objects from the said catalogs.

The objects in these catalogs do not have a (user given) name but they can be
manipulated invdividually through ALTER PROPERTY GRAPH sub-commands. Hence they
need to be accessible to the event triggers. Handle these catalogs in the
respective functions.

Reported-by: Bertrand Drouvot <[email protected]>
Author: Bertrand Drouvot <[email protected]>
Author: Ashutosh Bapat <[email protected]>
Reviewed-by: Michael Paquier <[email protected]>
Reviewed-by: Ashutosh Bapat <[email protected]>
Discussion: https://postgr.es/m/aej1DkLwhyZWmtxJ@bdtpg
---
 src/backend/catalog/objectaddress.c           |  83 ++++++++
 .../expected/create_property_graph.out        | 189 ++++++++++--------
 src/test/regress/expected/event_trigger.out   |  22 ++
 src/test/regress/expected/object_address.out  |   9 +-
 .../regress/sql/create_property_graph.sql     |  31 ++-
 src/test/regress/sql/event_trigger.sql        |  15 ++
 src/test/regress/sql/object_address.sql       |   5 +-
 7 files changed, 261 insertions(+), 93 deletions(-)

diff --git a/src/backend/catalog/objectaddress.c 
b/src/backend/catalog/objectaddress.c
index 050b7829eb0a..f814c8b9a409 100644
--- a/src/backend/catalog/objectaddress.c
+++ b/src/backend/catalog/objectaddress.c
@@ -4897,6 +4897,14 @@ getObjectTypeDescription(const ObjectAddress *object, 
bool missing_ok)
                        appendStringInfoString(&buffer, "property graph 
property");
                        break;
 
+               case PropgraphElementLabelRelationId:
+                       appendStringInfoString(&buffer, "property graph element 
label");
+                       break;
+
+               case PropgraphLabelPropertyRelationId:
+                       appendStringInfoString(&buffer, "property graph label 
property");
+                       break;
+
                case PublicationRelationId:
                        appendStringInfoString(&buffer, "publication");
                        break;
@@ -6212,6 +6220,81 @@ getObjectIdentityParts(const ObjectAddress *object,
                                break;
                        }
 
+               case PropgraphElementLabelRelationId:
+                       {
+                               Relation        ellabelDesc;
+                               HeapTuple       tup;
+                               Form_pg_propgraph_element_label pgelform;
+                               ObjectAddress oa;
+                               char       *labelname;
+
+                               ellabelDesc = 
table_open(PropgraphElementLabelRelationId, AccessShareLock);
+                               tup = get_catalog_object_by_oid(ellabelDesc,
+                                                                               
                Anum_pg_propgraph_element_label_oid,
+                                                                               
                object->objectId);
+                               if (!HeapTupleIsValid(tup))
+                               {
+                                       if (!missing_ok)
+                                               elog(ERROR, "could not find 
tuple for element label %u",
+                                                        object->objectId);
+
+                                       table_close(ellabelDesc, 
AccessShareLock);
+                                       break;
+                               }
+
+                               pgelform = (Form_pg_propgraph_element_label) 
GETSTRUCT(tup);
+
+                               labelname = 
get_propgraph_label_name(pgelform->pgellabelid);
+                               appendStringInfo(&buffer, _("%s of "), 
quote_identifier(labelname));
+                               ObjectAddressSet(oa, 
PropgraphElementRelationId, pgelform->pgelelid);
+                               appendStringInfoString(&buffer, 
getObjectIdentityParts(&oa, objname,
+                                                                               
                                                           objargs, false));
+                               /* labelname is already pstrdup'ed. */
+                               if (objname)
+                                       *objname = lappend(*objname, labelname);
+
+                               table_close(ellabelDesc, AccessShareLock);
+                               break;
+                       }
+
+               case PropgraphLabelPropertyRelationId:
+                       {
+                               Relation        lblpropDesc;
+                               HeapTuple       tup;
+                               Form_pg_propgraph_label_property plpform;
+                               ObjectAddress oa;
+                               char       *propname;
+
+                               lblpropDesc = 
table_open(PropgraphLabelPropertyRelationId,
+                                                                               
 AccessShareLock);
+                               tup = get_catalog_object_by_oid(lblpropDesc,
+                                                                               
                Anum_pg_propgraph_label_property_oid,
+                                                                               
                object->objectId);
+                               if (!HeapTupleIsValid(tup))
+                               {
+                                       if (!missing_ok)
+                                               elog(ERROR, "could not find 
tuple for label property %u",
+                                                        object->objectId);
+
+                                       table_close(lblpropDesc, 
AccessShareLock);
+                                       break;
+                               }
+
+                               plpform = (Form_pg_propgraph_label_property) 
GETSTRUCT(tup);
+
+                               propname = 
get_propgraph_property_name(plpform->plppropid);
+                               appendStringInfo(&buffer, _("%s of "), 
quote_identifier(propname));
+                               ObjectAddressSet(oa, 
PropgraphElementLabelRelationId, plpform->plpellabelid);
+                               appendStringInfoString(&buffer, 
getObjectIdentityParts(&oa, objname,
+                                                                               
                                                           objargs, false));
+                               /* propname is already pstrdup'ed. */
+                               if (objname)
+                                       *objname = lappend(*objname, propname);
+
+                               table_close(lblpropDesc, AccessShareLock);
+                               break;
+                       }
+
                case PublicationRelationId:
                        {
                                char       *pubname;
diff --git a/src/test/regress/expected/create_property_graph.out 
b/src/test/regress/expected/create_property_graph.out
index 4fc4759f18e7..84d9248fa603 100644
--- a/src/test/regress/expected/create_property_graph.out
+++ b/src/test/regress/expected/create_property_graph.out
@@ -661,93 +661,122 @@ SELECT * FROM 
information_schema.pg_property_graph_privileges WHERE grantee LIKE
 (2 rows)
 
 -- test object address functions
+CREATE TEMPORARY VIEW deps_tree AS
+    WITH RECURSIVE deps (classid, objid, objsubid, refclassid, refobjid, 
refobjsubid) AS (
+        SELECT classid, objid, objsubid,
+               refclassid, refobjid, refobjsubid
+        FROM pg_depend
+        WHERE refclassid = 'pg_class'::regclass AND
+              refobjid = 'create_property_graph_tests.gt'::regclass AND
+        -- eliminate this view, which is not a real dependency, from the result
+              classid <> 'pg_rewrite'::regclass
+        UNION ALL
+        SELECT d.classid, d.objid, d.objsubid,
+               d.refclassid, d.refobjid, d.refobjsubid
+        FROM pg_depend d
+        JOIN deps dp ON d.refclassid = dp.classid AND d.refobjid = dp.objid 
AND d.refobjsubid = dp.objsubid
+    ) SELECT DISTINCT * FROM deps;
 SELECT pg_describe_object(classid, objid, objsubid) as obj,
-       pg_describe_object(refclassid, refobjid, refobjsubid) as reference_graph
-    FROM pg_depend
-    WHERE refclassid = 'pg_class'::regclass AND
-          refobjid = 'create_property_graph_tests.g2'::regclass
-    ORDER BY 1, 2;
-               obj               |  reference_graph  
----------------------------------+-------------------
- edge e1 of property graph g2    | property graph g2
- edge e2 of property graph g2    | property graph g2
- label e1 of property graph g2   | property graph g2
- label e2 of property graph g2   | property graph g2
- label t1 of property graph g2   | property graph g2
- label t2 of property graph g2   | property graph g2
- label t3l1 of property graph g2 | property graph g2
- label t3l2 of property graph g2 | property graph g2
- property a of property graph g2 | property graph g2
- property b of property graph g2 | property graph g2
- property i of property graph g2 | property graph g2
- property j of property graph g2 | property graph g2
- property k of property graph g2 | property graph g2
- property t of property graph g2 | property graph g2
- property x of property graph g2 | property graph g2
- property y of property graph g2 | property graph g2
- property z of property graph g2 | property graph g2
- vertex t1 of property graph g2  | property graph g2
- vertex t2 of property graph g2  | property graph g2
- vertex t3 of property graph g2  | property graph g2
-(20 rows)
+       pg_describe_object(refclassid, refobjid, refobjsubid) as refobj
+    FROM deps_tree ORDER BY 1, 2;
+                           obj                            |                   
refobj                   
+----------------------------------------------------------+--------------------------------------------
+ edge e of property graph gt                              | property graph gt
+ edge e of property graph gt                              | vertex v1 of 
property graph gt
+ edge e of property graph gt                              | vertex v2 of 
property graph gt
+ label e of edge e of property graph gt                   | edge e of property 
graph gt
+ label e of edge e of property graph gt                   | label e of 
property graph gt
+ label e of property graph gt                             | property graph gt
+ label v1 of property graph gt                            | property graph gt
+ label v1 of vertex v1 of property graph gt               | label v1 of 
property graph gt
+ label v1 of vertex v1 of property graph gt               | vertex v1 of 
property graph gt
+ label v2 of property graph gt                            | property graph gt
+ label v2 of vertex v2 of property graph gt               | label v2 of 
property graph gt
+ label v2 of vertex v2 of property graph gt               | vertex v2 of 
property graph gt
+ property a of label v1 of vertex v1 of property graph gt | label v1 of vertex 
v1 of property graph gt
+ property a of label v1 of vertex v1 of property graph gt | property a of 
property graph gt
+ property a of property graph gt                          | property graph gt
+ property b of label v1 of vertex v1 of property graph gt | label v1 of vertex 
v1 of property graph gt
+ property b of label v1 of vertex v1 of property graph gt | property b of 
property graph gt
+ property b of property graph gt                          | property graph gt
+ property c of label e of edge e of property graph gt     | label e of edge e 
of property graph gt
+ property c of label e of edge e of property graph gt     | property c of 
property graph gt
+ property c of property graph gt                          | property graph gt
+ property k1 of label e of edge e of property graph gt    | label e of edge e 
of property graph gt
+ property k1 of label e of edge e of property graph gt    | property k1 of 
property graph gt
+ property k1 of property graph gt                         | property graph gt
+ property k2 of label e of edge e of property graph gt    | label e of edge e 
of property graph gt
+ property k2 of label e of edge e of property graph gt    | property k2 of 
property graph gt
+ property k2 of property graph gt                         | property graph gt
+ property m of label v2 of vertex v2 of property graph gt | label v2 of vertex 
v2 of property graph gt
+ property m of label v2 of vertex v2 of property graph gt | property m of 
property graph gt
+ property m of property graph gt                          | property graph gt
+ property n of label v2 of vertex v2 of property graph gt | label v2 of vertex 
v2 of property graph gt
+ property n of label v2 of vertex v2 of property graph gt | property n of 
property graph gt
+ property n of property graph gt                          | property graph gt
+ vertex v1 of property graph gt                           | property graph gt
+ vertex v2 of property graph gt                           | property graph gt
+(35 rows)
 
 SELECT (pg_identify_object_as_address(classid, objid, objsubid)).*
-    FROM pg_depend
-    WHERE refclassid = 'pg_class'::regclass AND
-          refobjid = 'create_property_graph_tests.g2'::regclass
+    FROM (SELECT DISTINCT classid, objid, objsubid FROM deps_tree)
     ORDER BY 1, 2, 3;
-          type           |             object_names              | object_args 
--------------------------+---------------------------------------+-------------
- property graph element  | {create_property_graph_tests,g2,e1}   | {}
- property graph element  | {create_property_graph_tests,g2,e2}   | {}
- property graph element  | {create_property_graph_tests,g2,t1}   | {}
- property graph element  | {create_property_graph_tests,g2,t2}   | {}
- property graph element  | {create_property_graph_tests,g2,t3}   | {}
- property graph label    | {create_property_graph_tests,g2,e1}   | {}
- property graph label    | {create_property_graph_tests,g2,e2}   | {}
- property graph label    | {create_property_graph_tests,g2,t1}   | {}
- property graph label    | {create_property_graph_tests,g2,t2}   | {}
- property graph label    | {create_property_graph_tests,g2,t3l1} | {}
- property graph label    | {create_property_graph_tests,g2,t3l2} | {}
- property graph property | {create_property_graph_tests,g2,a}    | {}
- property graph property | {create_property_graph_tests,g2,b}    | {}
- property graph property | {create_property_graph_tests,g2,i}    | {}
- property graph property | {create_property_graph_tests,g2,j}    | {}
- property graph property | {create_property_graph_tests,g2,k}    | {}
- property graph property | {create_property_graph_tests,g2,t}    | {}
- property graph property | {create_property_graph_tests,g2,x}    | {}
- property graph property | {create_property_graph_tests,g2,y}    | {}
- property graph property | {create_property_graph_tests,g2,z}    | {}
-(20 rows)
+             type              |               object_names               | 
object_args 
+-------------------------------+------------------------------------------+-------------
+ property graph element        | {create_property_graph_tests,gt,e}       | {}
+ property graph element        | {create_property_graph_tests,gt,v1}      | {}
+ property graph element        | {create_property_graph_tests,gt,v2}      | {}
+ property graph element label  | {create_property_graph_tests,gt,e,e}     | {}
+ property graph element label  | {create_property_graph_tests,gt,v1,v1}   | {}
+ property graph element label  | {create_property_graph_tests,gt,v2,v2}   | {}
+ property graph label          | {create_property_graph_tests,gt,e}       | {}
+ property graph label          | {create_property_graph_tests,gt,v1}      | {}
+ property graph label          | {create_property_graph_tests,gt,v2}      | {}
+ property graph label property | {create_property_graph_tests,gt,e,e,c}   | {}
+ property graph label property | {create_property_graph_tests,gt,e,e,k1}  | {}
+ property graph label property | {create_property_graph_tests,gt,e,e,k2}  | {}
+ property graph label property | {create_property_graph_tests,gt,v1,v1,a} | {}
+ property graph label property | {create_property_graph_tests,gt,v1,v1,b} | {}
+ property graph label property | {create_property_graph_tests,gt,v2,v2,m} | {}
+ property graph label property | {create_property_graph_tests,gt,v2,v2,n} | {}
+ property graph property       | {create_property_graph_tests,gt,a}       | {}
+ property graph property       | {create_property_graph_tests,gt,b}       | {}
+ property graph property       | {create_property_graph_tests,gt,c}       | {}
+ property graph property       | {create_property_graph_tests,gt,k1}      | {}
+ property graph property       | {create_property_graph_tests,gt,k2}      | {}
+ property graph property       | {create_property_graph_tests,gt,m}       | {}
+ property graph property       | {create_property_graph_tests,gt,n}       | {}
+(23 rows)
 
 SELECT (pg_identify_object(classid, objid, objsubid)).*
-    FROM pg_depend
-    WHERE refclassid = 'pg_class'::regclass AND
-          refobjid = 'create_property_graph_tests.g2'::regclass
+    FROM (SELECT DISTINCT classid, objid, objsubid FROM deps_tree)
     ORDER BY 1, 2, 3, 4;
-          type           | schema | name |                identity             
   
--------------------------+--------+------+----------------------------------------
- property graph element  |        |      | e1 of create_property_graph_tests.g2
- property graph element  |        |      | e2 of create_property_graph_tests.g2
- property graph element  |        |      | t1 of create_property_graph_tests.g2
- property graph element  |        |      | t2 of create_property_graph_tests.g2
- property graph element  |        |      | t3 of create_property_graph_tests.g2
- property graph label    |        |      | e1 of create_property_graph_tests.g2
- property graph label    |        |      | e2 of create_property_graph_tests.g2
- property graph label    |        |      | t1 of create_property_graph_tests.g2
- property graph label    |        |      | t2 of create_property_graph_tests.g2
- property graph label    |        |      | t3l1 of 
create_property_graph_tests.g2
- property graph label    |        |      | t3l2 of 
create_property_graph_tests.g2
- property graph property |        |      | a of create_property_graph_tests.g2
- property graph property |        |      | b of create_property_graph_tests.g2
- property graph property |        |      | i of create_property_graph_tests.g2
- property graph property |        |      | j of create_property_graph_tests.g2
- property graph property |        |      | k of create_property_graph_tests.g2
- property graph property |        |      | t of create_property_graph_tests.g2
- property graph property |        |      | x of create_property_graph_tests.g2
- property graph property |        |      | y of create_property_graph_tests.g2
- property graph property |        |      | z of create_property_graph_tests.g2
-(20 rows)
+             type              | schema | name |                    identity   
                  
+-------------------------------+--------+------+-------------------------------------------------
+ property graph element        |        |      | e of 
create_property_graph_tests.gt
+ property graph element        |        |      | v1 of 
create_property_graph_tests.gt
+ property graph element        |        |      | v2 of 
create_property_graph_tests.gt
+ property graph element label  |        |      | e of e of 
create_property_graph_tests.gt
+ property graph element label  |        |      | v1 of v1 of 
create_property_graph_tests.gt
+ property graph element label  |        |      | v2 of v2 of 
create_property_graph_tests.gt
+ property graph label          |        |      | e of 
create_property_graph_tests.gt
+ property graph label          |        |      | v1 of 
create_property_graph_tests.gt
+ property graph label          |        |      | v2 of 
create_property_graph_tests.gt
+ property graph label property |        |      | a of v1 of v1 of 
create_property_graph_tests.gt
+ property graph label property |        |      | b of v1 of v1 of 
create_property_graph_tests.gt
+ property graph label property |        |      | c of e of e of 
create_property_graph_tests.gt
+ property graph label property |        |      | k1 of e of e of 
create_property_graph_tests.gt
+ property graph label property |        |      | k2 of e of e of 
create_property_graph_tests.gt
+ property graph label property |        |      | m of v2 of v2 of 
create_property_graph_tests.gt
+ property graph label property |        |      | n of v2 of v2 of 
create_property_graph_tests.gt
+ property graph property       |        |      | a of 
create_property_graph_tests.gt
+ property graph property       |        |      | b of 
create_property_graph_tests.gt
+ property graph property       |        |      | c of 
create_property_graph_tests.gt
+ property graph property       |        |      | k1 of 
create_property_graph_tests.gt
+ property graph property       |        |      | k2 of 
create_property_graph_tests.gt
+ property graph property       |        |      | m of 
create_property_graph_tests.gt
+ property graph property       |        |      | n of 
create_property_graph_tests.gt
+(23 rows)
 
 \a\t
 SELECT pg_get_propgraphdef('g2'::regclass);
diff --git a/src/test/regress/expected/event_trigger.out 
b/src/test/regress/expected/event_trigger.out
index 065f586310ff..86ae50ce5311 100644
--- a/src/test/regress/expected/event_trigger.out
+++ b/src/test/regress/expected/event_trigger.out
@@ -173,6 +173,28 @@ NOTICE:  test_event_trigger: ddl_command_end CREATE USER 
MAPPING
 alter default privileges for role regress_evt_user
  revoke delete on tables from regress_evt_user;
 NOTICE:  test_event_trigger: ddl_command_end ALTER DEFAULT PRIVILEGES
+-- DROP PROPERTY GRAPH should work with event trigger in place
+CREATE TABLE tv1 (a int PRIMARY KEY, b text);
+NOTICE:  test_event_trigger: ddl_command_start CREATE TABLE
+NOTICE:  test_event_trigger: ddl_command_end CREATE TABLE
+CREATE TABLE tv2 (i int PRIMARY KEY, j text);
+NOTICE:  test_event_trigger: ddl_command_start CREATE TABLE
+NOTICE:  test_event_trigger: ddl_command_end CREATE TABLE
+CREATE TABLE te1 (p int PRIMARY KEY, a int REFERENCES tv1(a), b int REFERENCES 
tv2(i), q text);
+NOTICE:  test_event_trigger: ddl_command_start CREATE TABLE
+NOTICE:  test_event_trigger: ddl_command_end CREATE TABLE
+CREATE PROPERTY GRAPH gx
+       VERTEX TABLES (
+               tv1 LABEL l1 PROPERTIES (b AS p1),
+               tv2 LABEL l2 PROPERTIES (j AS p1))
+  EDGE TABLES (te1 SOURCE tv1 DESTINATION tv2 LABEL e1 PROPERTIES (q as p1));
+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"
diff --git a/src/test/regress/expected/object_address.out 
b/src/test/regress/expected/object_address.out
index 97227d67a541..3fc8345e8486 100644
--- a/src/test/regress/expected/object_address.out
+++ b/src/test/regress/expected/object_address.out
@@ -67,7 +67,8 @@ DECLARE
 BEGIN
     FOR objtype IN VALUES ('toast table'), ('index column'), ('sequence 
column'),
         ('toast table column'), ('view column'), ('materialized view column'),
-        ('property graph element'), ('property graph label'), ('property graph 
property')
+        ('property graph element'), ('property graph label'), ('property graph 
property'),
+        ('property graph element label'), ('property graph label property')
     LOOP
         BEGIN
             PERFORM pg_get_object_address(objtype, '{one}', '{}');
@@ -86,6 +87,8 @@ WARNING:  error for materialized view column: unsupported 
object type "materiali
 WARNING:  error for property graph element: unsupported object type "property 
graph element"
 WARNING:  error for property graph label: unsupported object type "property 
graph label"
 WARNING:  error for property graph property: unsupported object type "property 
graph property"
+WARNING:  error for property graph element label: unrecognized object type 
"property graph element label"
+WARNING:  error for property graph label property: unrecognized object type 
"property graph label property"
 -- miscellaneous other errors
 select * from pg_get_object_address('operator of access method', 
'{btree,integer_ops,1}', '{int4,bool}');
 ERROR:  operator 1 (int4, bool) of operator family integer_ops for access 
method btree does not exist
@@ -595,6 +598,8 @@ WITH objects (classid, objid, objsubid) AS (VALUES
     ('pg_propgraph_element'::regclass, 0, 0), -- no property graph element
     ('pg_propgraph_label'::regclass, 0, 0), -- no property graph label
     ('pg_propgraph_property'::regclass, 0, 0), -- no property graph property
+    ('pg_propgraph_element_label'::regclass, 0, 0), -- no property graph 
element label
+    ('pg_propgraph_label_property'::regclass, 0, 0), -- no property graph 
label property
     ('pg_publication'::regclass, 0, 0), -- no publication
     ('pg_publication_namespace'::regclass, 0, 0), -- no publication namespace
     ('pg_publication_rel'::regclass, 0, 0), -- no publication relation
@@ -653,6 +658,8 @@ ORDER BY objects.classid, objects.objid, objects.objsubid;
 ("(""parameter ACL"",,,)")|("(""parameter ACL"",,)")|NULL
 ("(""property graph element"",,,)")|("(""property graph element"",,)")|NULL
 ("(""property graph label"",,,)")|("(""property graph label"",,)")|NULL
+("(""property graph element label"",,,)")|("(""property graph element 
label"",,)")|NULL
 ("(""property graph property"",,,)")|("(""property graph property"",,)")|NULL
+("(""property graph label property"",,,)")|("(""property graph label 
property"",,)")|NULL
 -- restore normal output mode
 \a\t
diff --git a/src/test/regress/sql/create_property_graph.sql 
b/src/test/regress/sql/create_property_graph.sql
index 241f93df3028..85088ae632c7 100644
--- a/src/test/regress/sql/create_property_graph.sql
+++ b/src/test/regress/sql/create_property_graph.sql
@@ -281,21 +281,30 @@ SELECT * FROM information_schema.pg_property_data_types 
ORDER BY property_graph_
 SELECT * FROM information_schema.pg_property_graph_privileges WHERE grantee 
LIKE 'regress%' ORDER BY property_graph_name, grantor, grantee, privilege_type;
 
 -- test object address functions
+CREATE TEMPORARY VIEW deps_tree AS
+    WITH RECURSIVE deps (classid, objid, objsubid, refclassid, refobjid, 
refobjsubid) AS (
+        SELECT classid, objid, objsubid,
+               refclassid, refobjid, refobjsubid
+        FROM pg_depend
+        WHERE refclassid = 'pg_class'::regclass AND
+              refobjid = 'create_property_graph_tests.gt'::regclass AND
+        -- eliminate this view, which is not a real dependency, from the result
+              classid <> 'pg_rewrite'::regclass
+        UNION ALL
+        SELECT d.classid, d.objid, d.objsubid,
+               d.refclassid, d.refobjid, d.refobjsubid
+        FROM pg_depend d
+        JOIN deps dp ON d.refclassid = dp.classid AND d.refobjid = dp.objid 
AND d.refobjsubid = dp.objsubid
+    ) SELECT DISTINCT * FROM deps;
+
 SELECT pg_describe_object(classid, objid, objsubid) as obj,
-       pg_describe_object(refclassid, refobjid, refobjsubid) as reference_graph
-    FROM pg_depend
-    WHERE refclassid = 'pg_class'::regclass AND
-          refobjid = 'create_property_graph_tests.g2'::regclass
-    ORDER BY 1, 2;
+       pg_describe_object(refclassid, refobjid, refobjsubid) as refobj
+    FROM deps_tree ORDER BY 1, 2;
 SELECT (pg_identify_object_as_address(classid, objid, objsubid)).*
-    FROM pg_depend
-    WHERE refclassid = 'pg_class'::regclass AND
-          refobjid = 'create_property_graph_tests.g2'::regclass
+    FROM (SELECT DISTINCT classid, objid, objsubid FROM deps_tree)
     ORDER BY 1, 2, 3;
 SELECT (pg_identify_object(classid, objid, objsubid)).*
-    FROM pg_depend
-    WHERE refclassid = 'pg_class'::regclass AND
-          refobjid = 'create_property_graph_tests.g2'::regclass
+    FROM (SELECT DISTINCT classid, objid, objsubid FROM deps_tree)
     ORDER BY 1, 2, 3, 4;
 
 \a\t
diff --git a/src/test/regress/sql/event_trigger.sql 
b/src/test/regress/sql/event_trigger.sql
index 32e9bb58c5e9..d0e6ba295fe2 100644
--- a/src/test/regress/sql/event_trigger.sql
+++ b/src/test/regress/sql/event_trigger.sql
@@ -143,6 +143,21 @@ create user mapping for regress_evt_user server 
useless_server;
 alter default privileges for role regress_evt_user
  revoke delete on tables from regress_evt_user;
 
+-- DROP PROPERTY GRAPH should work with event trigger in place
+CREATE TABLE tv1 (a int PRIMARY KEY, b text);
+CREATE TABLE tv2 (i int PRIMARY KEY, j text);
+CREATE TABLE te1 (p int PRIMARY KEY, a int REFERENCES tv1(a), b int REFERENCES 
tv2(i), q text);
+
+CREATE PROPERTY GRAPH gx
+       VERTEX TABLES (
+               tv1 LABEL l1 PROPERTIES (b AS p1),
+               tv2 LABEL l2 PROPERTIES (j AS p1))
+  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;
 
diff --git a/src/test/regress/sql/object_address.sql 
b/src/test/regress/sql/object_address.sql
index 1bbe9457c1ca..ed795a32e22a 100644
--- a/src/test/regress/sql/object_address.sql
+++ b/src/test/regress/sql/object_address.sql
@@ -67,7 +67,8 @@ DECLARE
 BEGIN
     FOR objtype IN VALUES ('toast table'), ('index column'), ('sequence 
column'),
         ('toast table column'), ('view column'), ('materialized view column'),
-        ('property graph element'), ('property graph label'), ('property graph 
property')
+        ('property graph element'), ('property graph label'), ('property graph 
property'),
+        ('property graph element label'), ('property graph label property')
     LOOP
         BEGIN
             PERFORM pg_get_object_address(objtype, '{one}', '{}');
@@ -284,6 +285,8 @@ WITH objects (classid, objid, objsubid) AS (VALUES
     ('pg_propgraph_element'::regclass, 0, 0), -- no property graph element
     ('pg_propgraph_label'::regclass, 0, 0), -- no property graph label
     ('pg_propgraph_property'::regclass, 0, 0), -- no property graph property
+    ('pg_propgraph_element_label'::regclass, 0, 0), -- no property graph 
element label
+    ('pg_propgraph_label_property'::regclass, 0, 0), -- no property graph 
label property
     ('pg_publication'::regclass, 0, 0), -- no publication
     ('pg_publication_namespace'::regclass, 0, 0), -- no publication namespace
     ('pg_publication_rel'::regclass, 0, 0), -- no publication relation
-- 
2.54.0

Attachment: signature.asc
Description: PGP signature

Reply via email to