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
Linda Hamiltonoriginal
2024-12-20 02:37:09145parcourir

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$;

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$;

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:
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