

Il est souvent intéressant de grouper les utilisateurs pour faciliter la gestion des droits : de cette façon, les droits peuvent être donnés ou supprimés pour tout un groupe. Dans PostgreSQL, ceci se fait en créant un rôle représentant le groupe, puis en ajoutant les rôles utilisateurs individuels membres de ce groupe.
Pour configurer un rôle en tant que groupe, créez tout d'abord le rôle :
CREATE ROLE nom;
   Typiquement, un rôle utilisé en tant que groupe n'aura pas l'attribut
   LOGIN bien que vous puissiez le faire si vous le souhaitez.
  
Une fois que ce rôle existe, vous pouvez lui ajouter et lui supprimer des membres en utilisant les commandes GRANT et REVOKE :
GRANTrole_groupeTOrole1, ... ; REVOKErole_groupeFROMrole1, ... ;
   Vous pouvez aussi faire en sorte que d'autres rôles groupes appartiennent à
   ce groupe (car il n'y a pas réellement de distinction entre les rôles groupe
   et les rôles non groupe). La base de données ne vous laissera pas configurer
   des boucles circulaires d'appartenance. De plus, il est interdit de faire en
   sorte qu'un membre appartienne à PUBLIC.
  
   Les membres d'un rôle groupe peuvent utiliser les droits du rôle de deux façons.
   Tout d'abord, chaque membre d'un groupe peut exécuter explicitement
   SET ROLE pour
   « devenir » temporairement le rôle groupe. Dans cet état, la session
   de la base de données a accès aux droits du rôle groupe plutôt qu'à ceux
   du rôle de connexion original et tous les objets créés sont considérés comme
   appartenant au rôle groupe, et non pas au rôle utilisé lors de la connexion.
   Deuxièmement, les rôles membres qui ont l'attribut INHERIT
   peuvent utiliser automatiquement les droits des rôles dont ils sont
   membres, ceci incluant les droits hérités par ces rôles.
   Comme exemple, supposons que nous avons lancé les commandes
   suivantes :
CREATE ROLE joe LOGIN INHERIT; CREATE ROLE admin NOINHERIT; CREATE ROLE wheel NOINHERIT; GRANT admin TO joe; GRANT wheel TO admin;
   Immédiatement après connexion en tant que joe, la session de la
   base de données peut utiliser les droits donnés directement à
   joe ainsi que ceux donnés à admin parce que
   joe « hérite » des droits de admin. Néanmoins,
   les droits donnés à wheel ne sont pas disponibles parce que,
   même si joe est un membre indirect de wheel,
   l'appartenance se fait via admin qui dispose de l'attribut
   NOINHERIT. Après :
SET ROLE admin;
   la session aura la possibilité d'utiliser les droits donnés à
   admin mais n'aura plus accès à ceux de joe. Après :
SET ROLE wheel;
   la session pourra utiliser uniquement ceux de wheel, mais ni
   ceux de joe ni ceux de admin. L'état du droit initial
   peut être restauré avec une des instructions suivantes :
SET ROLE joe; SET ROLE NONE; RESET ROLE;
    La commande SET ROLE autorisera toujours la sélection de tout
    rôle dont le rôle de connexion est membre directement ou indirectement.
    Du coup, dans l'exemple précédent, il n'est pas nécessaire de devenir
    admin pour devenir wheel.
   
    Dans le standard SQL, il existe une distinction claire entre les
    utilisateurs et les rôles. Les utilisateurs ne peuvent pas hériter
    automatiquement alors que les rôles le peuvent. Ce comportement est obtenu
    dans PostgreSQL en donnant aux rôles utilisés
    comme des rôles SQL l'attribut INHERIT, mais en donnant aux
    rôles utilisés en tant qu'utilisateurs SQL l'attribut
    NOINHERIT. Néanmoins, par défaut,
    PostgreSQL donne à tous les rôles l'attribut
    INHERIT pour des raisons de compatibilité avec les versions
    précédant la 8.1 dans lesquelles les utilisateurs avaient toujours les
    droits des groupes dont ils étaient membres.
   
   Les attributs LOGIN, SUPERUSER, CREATEDB
   et CREATEROLE peuvent être vus comme des droits spéciaux qui ne
   sont jamais hérités contrairement aux droits ordinaires sur les objets de la
   base. Vous devez réellement utiliser SET ROLE vers un rôle
   spécifique pour avoir un de ces attributs et l'utiliser. Pour continuer avec
   l'exemple précédent, nous pourrions très bien choisir de donner les droits
   CREATEDB et CREATEROLE au rôle admin.
   Puis, une session connectée en tant que le rôle joe n'aurait pas
   ces droits immédiatement, seulement après avoir exécuté SET ROLE
   admin.
  
Pour détruire un rôle groupe, utilisez DROP ROLE:
DROP ROLE nom;Toute appartenance à ce rôle est automatiquement supprimée (mais les rôles membres ne sont pas autrement affectés).