Heim > Datenbank > MySQL-Tutorial > Wie erstelle ich eine PostgreSQL-Rolle nur, wenn sie noch nicht vorhanden ist?

Wie erstelle ich eine PostgreSQL-Rolle nur, wenn sie noch nicht vorhanden ist?

Linda Hamilton
Freigeben: 2024-12-20 02:37:09
Original
170 Leute haben es durchsucht

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

PostgreSQL-ROLLE (Benutzer) erstellen, wenn sie nicht existiert

Problem:

Das Erstellen einer PostgreSQL-Rolle mit der CREATE ROLE-Anweisung löst einen Fehler aus, wenn die Rolle bereits vorhanden ist. Wie erstellt man eine Rolle nur, wenn sie nicht existiert?

Lösung:

Verwenden Sie die DO-Anweisung mit einem PL/pgSQL-Codeblock, um die Rollenerstellung durchzuführen bedingt:

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$;
Nach dem Login kopieren

Optimierung:

Um Potenzial zu vermeiden Aufgrund von Rennbedingungen und Leistungsaufwand sollten Sie die Verwendung eines verschachtelten Blocks innerhalb des Ausnahmebehandlungsmechanismus in Betracht ziehen:

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$;
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie erstelle ich eine PostgreSQL-Rolle nur, wenn sie noch nicht vorhanden ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage