Maison > base de données > tutoriel mysql > Comment créer un rôle PostgreSQL uniquement s'il n'existe pas déjà ?

Comment créer un rôle PostgreSQL uniquement s'il n'existe pas déjà ?

Linda Hamilton
Libérer: 2024-12-20 02:37:09
original
258 Les gens l'ont consulté

How to Create a PostgreSQL Role Only if It Doesn't Already Exist?

Créer un RÔLE PostgreSQL (utilisateur) s'il n'existe pas

Problème :

La création d'un rôle PostgreSQL à l'aide de l'instruction CREATE ROLE génère une erreur si le rôle existe déjà. Comment créer un rôle uniquement s'il n'existe pas ?

Solution :

Utilisez l'instruction DO avec un bloc de code PL/pgSQL pour effectuer la création du rôle conditionnellement :

DO
$do$
BEGIN
   IF EXISTS (
      SELECT FROM pg_catalog.pg_roles
      WHERE  rolname = 'my_user') THEN

      RAISE NOTICE 'Role "my_user" already exists. Skipping.';
   ELSE
      CREATE ROLE my_user LOGIN PASSWORD 'my_password';
   END IF;
END
$do$;
Copier après la connexion

Optimisation :

Pour éviter les conditions de course potentielles et surcharge de performances, envisagez d'utiliser un bloc imbriqué dans le mécanisme de gestion des exceptions :

DO
$do$
BEGIN
   IF EXISTS (
      SELECT FROM pg_catalog.pg_roles
      WHERE  rolname = 'my_user') THEN

      RAISE NOTICE 'Role "my_user" already exists. Skipping.';
   ELSE
      BEGIN   -- nested block
         CREATE ROLE my_user LOGIN PASSWORD 'my_password';
      EXCEPTION
         WHEN duplicate_object THEN
            RAISE NOTICE 'Role "my_user" was just created by a concurrent transaction. Skipping.';
      END;
   END IF;
END
$do$;
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal