Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mencipta Peranan PostgreSQL Hanya jika Ia Belum Wujud?

Bagaimana untuk Mencipta Peranan PostgreSQL Hanya jika Ia Belum Wujud?

Linda Hamilton
Linda Hamiltonasal
2024-12-20 02:37:09149semak imbas

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

Buat PostgreSQL ROLE (Pengguna) jika Ia Tidak Wujud

Masalah:

Mencipta peranan PostgreSQL menggunakan pernyataan CREATE ROLE menimbulkan ralat jika peranan sudah wujud. Bagaimanakah anda mencipta peranan hanya jika ia tidak wujud?

Penyelesaian:

Gunakan pernyataan DO dengan blok kod PL/pgSQL untuk melaksanakan penciptaan peranan bersyarat:

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

Pengoptimuman:

Untuk mengelakkan keadaan perlumbaan yang berpotensi dan overhed prestasi, pertimbangkan untuk menggunakan blok bersarang dalam mekanisme pengendalian pengecualian:

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

Atas ialah kandungan terperinci Bagaimana untuk Mencipta Peranan PostgreSQL Hanya jika Ia Belum Wujud?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn