From 144c8575ba8c6386e6a738dab7b6c77568598b39 Mon Sep 17 00:00:00 2001 From: Bertrand Drouvot Date: Thu, 23 Apr 2026 09:27:39 +0000 Subject: [PATCH v20260429 4/4] 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 Author: Bertrand Drouvot Author: Ashutosh Bapat Reviewed-by: Michael Paquier Reviewed-by: Ashutosh Bapat Discussion: https://postgr.es/m/aej1DkLwhyZWmtxJ@bdtpg --- src/backend/catalog/objectaddress.c | 83 ++++++++ .../expected/create_property_graph.out | 198 ++++++++++-------- 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, 267 insertions(+), 96 deletions(-) diff --git a/src/backend/catalog/objectaddress.c b/src/backend/catalog/objectaddress.c index c1862809577..7451c5b16b2 100644 --- a/src/backend/catalog/objectaddress.c +++ b/src/backend/catalog/objectaddress.c @@ -4913,6 +4913,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 element label property"); + break; + case PublicationRelationId: appendStringInfoString(&buffer, "publication"); break; @@ -6228,6 +6236,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 7c3f25a3e0d..d3c2758257f 100644 --- a/src/test/regress/expected/create_property_graph.out +++ b/src/test/regress/expected/create_property_graph.out @@ -669,96 +669,128 @@ 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 - type 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 -(21 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 + type gt | property graph gt + type gt[] | type gt + vertex v1 of property graph gt | property graph gt + vertex v2 of property graph gt | property graph gt +(37 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} | {} - type | {create_property_graph_tests.g2} | {} -(21 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 element label property | {create_property_graph_tests,gt,e,e,c} | {} + property graph element label property | {create_property_graph_tests,gt,e,e,k1} | {} + property graph element label property | {create_property_graph_tests,gt,e,e,k2} | {} + property graph element label property | {create_property_graph_tests,gt,v1,v1,a} | {} + property graph element label property | {create_property_graph_tests,gt,v1,v1,b} | {} + property graph element label property | {create_property_graph_tests,gt,v2,v2,m} | {} + property graph element label property | {create_property_graph_tests,gt,v2,v2,n} | {} + 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 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} | {} + type | {create_property_graph_tests.gt} | {} + type | {create_property_graph_tests.gt[]} | {} +(25 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 - type | create_property_graph_tests | g2 | create_property_graph_tests.g2 -(21 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 element label property | | | a of v1 of v1 of create_property_graph_tests.gt + property graph element label property | | | b of v1 of v1 of create_property_graph_tests.gt + property graph element label property | | | c of e of e of create_property_graph_tests.gt + property graph element label property | | | k1 of e of e of create_property_graph_tests.gt + property graph element label property | | | k2 of e of e of create_property_graph_tests.gt + property graph element label property | | | m of v2 of v2 of create_property_graph_tests.gt + property graph element label property | | | n of 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 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 + type | create_property_graph_tests | _gt | create_property_graph_tests.gt[] + type | create_property_graph_tests | gt | create_property_graph_tests.gt +(25 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 065f586310f..86ae50ce531 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 97227d67a54..9f2d08398b0 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 element 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 element label property: unrecognized object type "property graph element 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 element label property"",,,)")|("(""property graph element 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 191412a6a33..e8b3b3ff94c 100644 --- a/src/test/regress/sql/create_property_graph.sql +++ b/src/test/regress/sql/create_property_graph.sql @@ -286,21 +286,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 32e9bb58c5e..d0e6ba295fe 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 1bbe9457c1c..e987bd3542f 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 element 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.34.1