SET ROLE — initialise l'identifiant utilisateur courant de la session en cours
SET [ SESSION | LOCAL ] ROLE nom_rôle
SET [ SESSION | LOCAL ] ROLE NONE
RESET ROLE
  
   Cette commande positionne l'identifiant utilisateur courant suivant la
   session SQL en cours à nom_rôle. Le nom du rôle peut être
   un identifiant ou une chaîne littérale.
   Après SET ROLE, la vérification des droits sur les commandes SQL
   est identique à ce qu'elle serait si le rôle nommé s'était lui-même connecté.
  
   Il est obligatoire que l'utilisateur de la session courante soit membre
   du rôle nom_rôle
   (si l'utilisateur de la session est super-utilisateur, tous les rôles sont
   utilisables).
  
   Les modificateurs SESSION et LOCAL agissent de la même
   façon que pour la commande SET.
  
   SET ROLE NONE initialise l'identifiant utilisateur
   courant avec l'identifiant de la session en cours, tel qu'il est renvoyé
   par session_user. RESET ROLE
   initialise l'identifiant de l'utilisateur courant avec le paramètre à la
   connexion indiqué par les options en
   ligne de commande, ALTER
   ROLE ou ALTER
   DATABASE, si de tels paramètres existent. Sinon,
   RESET ROLE initialise l'identifiant utilisateur courant
   avec l'identifiant utilisateur courant. Ces formats peuvent être exécutés
   par tout utilisateur.
  
   L'utilisation de cette commande permet d'étendre ou de restreindre les
   privilèges d'un utilisateur. Si le rôle de l'utilisateur de la
   session comprend l'attribut INHERIT, alors il
   acquiert automatiquement les droits de chaque rôle qu'il peut prendre
   par la commande SET ROLE ; dans
   ce cas, SET ROLE supprime tous les droits affectés
   directement à l'utilisateur de la session et les autres droits des rôles
   dont il est membre, ne lui laissant que les droits disponibles sur le rôle
   nommé. A l'opposé, si le rôle session de l'utilisateur dispose de
   l'attribut NOINHERIT, SET ROLE supprime les droits
   affectés directement à l'utilisateur session et les remplace par les
   privilèges du rôle nommé.
  
   En particulier, quand un utilisateur choisit un rôle autre que
   super-utilisateur via SET ROLE, il perd les droits
   super-utilisateur.
  
   SET ROLE a des effets comparables à
   SET SESSION
   AUTHORIZATION mais la vérification des
   droits diffère. De plus, SET SESSION AUTHORIZATION
   détermine les rôles autorisés
   dans les commandes SET ROLE ultérieures alors que
   SET ROLE ne modifie pas les rôles accessibles par
   un futur SET ROLE.
  
   SET ROLE ne traite pas les variables de session
   indiqué par les paramètres du rôle (et configurés avec ALTER ROLE ; cela ne
   survient qu'à la connexion.
  
   SET ROLE ne peut pas être utilisé dans une
   fonction SECURITY DEFINER.
  
SELECT SESSION_USER, CURRENT_USER; session_user | current_user --------------+-------------- peter | peter SET ROLE 'paul'; SELECT SESSION_USER, CURRENT_USER; session_user | current_user --------------+-------------- peter | paul
   PostgreSQL autorise la syntaxe identifiant
   (") alors que le SQL
   standard impose une chaîne littérale pour le nom du rôle.
   SQL n'autorise pas cette commande lors d'une transaction ;
   PostgreSQL n'est pas aussi restrictif,
   rien ne justifie cette interdiction. Les modificateurs
   nom_role"SESSION et LOCAL sont des extensions
   PostgreSQL tout comme la syntaxe RESET.