v7-0001-Handle-element-label-and-element-label-property-o.patch
text/plain
Filename: v7-0001-Handle-element-label-and-element-label-property-o.patch
Type: text/plain
Part: 0
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: format-patch
Series: patch v7-0001
Subject: Handle element label and element label property objects in object address functions
| File | + | − |
|---|---|---|
| src/backend/catalog/objectaddress.c | 83 | 0 |
| src/test/regress/expected/create_property_graph.out | 109 | 80 |
| src/test/regress/expected/event_trigger.out | 22 | 0 |
| src/test/regress/expected/object_address.out | 8 | 1 |
| src/test/regress/sql/create_property_graph.sql | 20 | 11 |
| src/test/regress/sql/event_trigger.sql | 15 | 0 |
| src/test/regress/sql/object_address.sql | 4 | 1 |
From 0beda6b3613b05616988caa854fcbc45feeaf55b Mon Sep 17 00:00:00 2001
From: Michael Paquier <michael@paquier.xyz>
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 <bertranddrouvot.pg@gmail.com>
Author: Bertrand Drouvot <bertranddrouvot.pg@gmail.com>
Author: Ashutosh Bapat <ashutosh.bapat.oss@gmail.com>
Reviewed-by: Michael Paquier <michael@paquier.xyz>
Reviewed-by: Ashutosh Bapat <ashutosh.bapat.oss@gmail.com>
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