diff --git a/src/backend/distributed/commands/dependencies.c b/src/backend/distributed/commands/dependencies.c index c7de5d874b7..ff4f4e2446d 100644 --- a/src/backend/distributed/commands/dependencies.c +++ b/src/backend/distributed/commands/dependencies.c @@ -344,9 +344,25 @@ DeferErrorIfCircularDependencyExists(const ObjectAddress *objectAddress) { char *objectDescription = getObjectDescription(objectAddress, false); + // Iterate all objects in the 'dependencies' list, get the object names and create a string + ListCell *cell; + StringInfo objectNames = makeStringInfo(); + foreach(cell, dependencies) + { + ObjectAddress *dependency1 = (ObjectAddress *) lfirst(cell); + char *objectName = getObjectDescription(dependency1, false); + appendStringInfo(objectNames, "%s\n", objectName); + } + //to show the circular dependency + + + + + StringInfo detailInfo = makeStringInfo(); appendStringInfo(detailInfo, "\"%s\" circularly depends itself, resolve " "circular dependency first", objectDescription); + appendStringInfo(detailInfo, "ependencies are:\n%s", objectNames->data); return DeferredError(ERRCODE_FEATURE_NOT_SUPPORTED, "Citus can not handle circular dependencies " diff --git a/src/backend/distributed/metadata/dependency.c b/src/backend/distributed/metadata/dependency.c index 63b8310756d..adbd1f27841 100644 --- a/src/backend/distributed/metadata/dependency.c +++ b/src/backend/distributed/metadata/dependency.c @@ -1819,6 +1819,8 @@ ExpandRolesToGroups(Oid roleid) true, NULL, scanKeyCount, scanKey); List *roles = NIL; + + elog(NOTICE, "Originator Roleid: %s", GetUserNameFromId(roleid, true)); while ((tuple = systable_getnext(scanDescriptor)) != NULL) { Form_pg_auth_members membership = (Form_pg_auth_members) GETSTRUCT(tuple); @@ -1827,14 +1829,21 @@ ExpandRolesToGroups(Oid roleid) definition->mode = DependencyObjectAddress; ObjectAddressSet(definition->data.address, AuthIdRelationId, membership->roleid); + //log the name of the membership->roleid + elog(NOTICE, "Dependency roleid granted: %s", GetUserNameFromId(membership->roleid, true)); + + roles = lappend(roles, definition); DependencyDefinition *definition1 = palloc0(sizeof(DependencyDefinition)); definition1->mode = DependencyObjectAddress; ObjectAddressSet(definition1->data.address, AuthIdRelationId, membership->grantor); + elog(NOTICE, "Dependency roleid grantor: %s",GetUserNameFromId( membership->grantor,true)); + elog(NOTICE, "Dependency roleid member: %s",GetUserNameFromId( membership->member,true)); roles = lappend(roles, definition1); } + elog(NOTICE, "Originator Roleid: %s completed", GetUserNameFromId(roleid, true)); systable_endscan(scanDescriptor); table_close(pgAuthMembers, AccessShareLock); diff --git a/src/test/regress/sql/granted_by_support.sql b/src/test/regress/sql/granted_by_support.sql index c597561dcd3..95c12b7cf5f 100644 --- a/src/test/regress/sql/granted_by_support.sql +++ b/src/test/regress/sql/granted_by_support.sql @@ -27,6 +27,8 @@ grant role4 to "role5'_test" with admin option; grant role4 to role1 with admin option GRANTED BY "role5'_test"; +SELECT roleid::regrole::text AS role, member::regrole::text, grantor::regrole::text, admin_option, inherit_option,set_option FROM pg_auth_members pa; + grant role4 to role3 with admin option GRANTED BY role1; grant role3 to role1 with admin option GRANTED BY role4;