From: Peter Eisentraut Date: Tue, 23 Jun 2026 06:58:16 +0000 (+0200) Subject: Readable identity strings for property graph objects X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2a7e95b659df2903420e27542e9127c50e8f2a17;p=thirdparty%2Fpostgresql.git Readable identity strings for property graph objects The "identity" column of pg_identify_object() for property graph objects can be long string of names connected by "of", e.g. "a of l of e of g". The type of the first named object is given by column "type". But the types of intermediate objects are not easy to find from the identity string especially when some of them share the same name. Some objects, like user mappings or authorization identifier members, add types of objects other than the first one in the identity string. Do the same for property graph objects. Author: Ashutosh Bapat Reviewed-by: Michael Paquier Discussion: https://www.postgresql.org/message-id/flat/aej1DkLwhyZWmtxJ%40bdtpg --- diff --git a/src/backend/catalog/objectaddress.c b/src/backend/catalog/objectaddress.c index de3ab11dd34..af0e4703616 100644 --- a/src/backend/catalog/objectaddress.c +++ b/src/backend/catalog/objectaddress.c @@ -6172,7 +6172,7 @@ getObjectIdentityParts(const ObjectAddress *object, break; } pge = (Form_pg_propgraph_element) GETSTRUCT(tup); - appendStringInfo(&buffer, "%s of ", quote_identifier(NameStr(pge->pgealias))); + appendStringInfo(&buffer, "%s of property graph ", quote_identifier(NameStr(pge->pgealias))); getRelationIdentity(&buffer, pge->pgepgid, objname, false); if (objname) @@ -6196,7 +6196,7 @@ getObjectIdentityParts(const ObjectAddress *object, } pgl = (Form_pg_propgraph_label) GETSTRUCT(tup); - appendStringInfo(&buffer, "%s of ", quote_identifier(NameStr(pgl->pgllabel))); + appendStringInfo(&buffer, "%s of property graph ", quote_identifier(NameStr(pgl->pgllabel))); getRelationIdentity(&buffer, pgl->pglpgid, objname, false); if (objname) *objname = lappend(*objname, pstrdup(NameStr(pgl->pgllabel))); @@ -6218,7 +6218,7 @@ getObjectIdentityParts(const ObjectAddress *object, } pgp = (Form_pg_propgraph_property) GETSTRUCT(tup); - appendStringInfo(&buffer, "%s of ", quote_identifier(NameStr(pgp->pgpname))); + appendStringInfo(&buffer, "%s of property graph ", quote_identifier(NameStr(pgp->pgpname))); getRelationIdentity(&buffer, pgp->pgppgid, objname, false); if (objname) *objname = lappend(*objname, pstrdup(NameStr(pgp->pgpname))); @@ -6251,7 +6251,7 @@ getObjectIdentityParts(const ObjectAddress *object, pgelform = (Form_pg_propgraph_element_label) GETSTRUCT(tup); labelname = get_propgraph_label_name(pgelform->pgellabelid); - appendStringInfo(&buffer, "%s of ", quote_identifier(labelname)); + appendStringInfo(&buffer, "%s of element ", quote_identifier(labelname)); ObjectAddressSet(oa, PropgraphElementRelationId, pgelform->pgelelid); appendStringInfoString(&buffer, getObjectIdentityParts(&oa, objname, objargs, false)); @@ -6289,7 +6289,7 @@ getObjectIdentityParts(const ObjectAddress *object, plpform = (Form_pg_propgraph_label_property) GETSTRUCT(tup); propname = get_propgraph_property_name(plpform->plppropid); - appendStringInfo(&buffer, "%s of ", quote_identifier(propname)); + appendStringInfo(&buffer, "%s of label ", quote_identifier(propname)); ObjectAddressSet(oa, PropgraphElementLabelRelationId, plpform->plpellabelid); appendStringInfoString(&buffer, getObjectIdentityParts(&oa, objname, objargs, false)); diff --git a/src/test/regress/expected/create_property_graph.out b/src/test/regress/expected/create_property_graph.out index 86c0957dcc7..2f06c7ce5a8 100644 --- a/src/test/regress/expected/create_property_graph.out +++ b/src/test/regress/expected/create_property_graph.out @@ -751,31 +751,31 @@ SELECT (pg_identify_object_as_address(classid, objid, objsubid)).* SELECT (pg_identify_object(classid, objid, objsubid)).* FROM (SELECT DISTINCT classid, objid, objsubid FROM deps_tree) ORDER BY 1, 2, 3, 4; - 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 + type | schema | name | identity +-------------------------------+--------+------+------------------------------------------------------------------------------ + property graph element | | | e of property graph create_property_graph_tests.gt + property graph element | | | v1 of property graph create_property_graph_tests.gt + property graph element | | | v2 of property graph create_property_graph_tests.gt + property graph element label | | | e of element e of property graph create_property_graph_tests.gt + property graph element label | | | v1 of element v1 of property graph create_property_graph_tests.gt + property graph element label | | | v2 of element v2 of property graph create_property_graph_tests.gt + property graph label | | | e of property graph create_property_graph_tests.gt + property graph label | | | v1 of property graph create_property_graph_tests.gt + property graph label | | | v2 of property graph create_property_graph_tests.gt + property graph label property | | | a of label v1 of element v1 of property graph create_property_graph_tests.gt + property graph label property | | | b of label v1 of element v1 of property graph create_property_graph_tests.gt + property graph label property | | | c of label e of element e of property graph create_property_graph_tests.gt + property graph label property | | | k1 of label e of element e of property graph create_property_graph_tests.gt + property graph label property | | | k2 of label e of element e of property graph create_property_graph_tests.gt + property graph label property | | | m of label v2 of element v2 of property graph create_property_graph_tests.gt + property graph label property | | | n of label v2 of element v2 of property graph create_property_graph_tests.gt + property graph property | | | a of property graph create_property_graph_tests.gt + property graph property | | | b of property graph create_property_graph_tests.gt + property graph property | | | c of property graph create_property_graph_tests.gt + property graph property | | | k1 of property graph create_property_graph_tests.gt + property graph property | | | k2 of property graph create_property_graph_tests.gt + property graph property | | | m of property graph create_property_graph_tests.gt + property graph property | | | n of property graph create_property_graph_tests.gt (23 rows) \a\t