Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mencipta Peranan PostgreSQL dengan Selamat jika ia Belum Wujud?

Bagaimana untuk Mencipta Peranan PostgreSQL dengan Selamat jika ia Belum Wujud?

Patricia Arquette
Lepaskan: 2024-12-28 19:54:11
asal
929 orang telah melayarinya

How to Safely Create a PostgreSQL Role if it Doesn't Already Exist?

Cara Mencipta PERANAN PostgreSQL jika Ia Tidak Wujud

Dalam PostgreSQL 9.1, mencipta PERANAN yang tidak wujud menggunakan skrip mudah seperti CREATE ROLE my_user LOGIN PASSWORD 'my_password' boleh gagal jika pengguna sudah wujud. Untuk mengelakkan ralat ini, pendekatan yang lebih canggih diperlukan.

Penyelesaian Menggunakan Pernyataan DO

Satu penyelesaian yang berkesan ialah menggunakan pernyataan DO dalam bahasa prosedur seperti PL/pgSQL:

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$;
Salin selepas log masuk

Skrip ini menyemak sama ada peranan sudah wujud menggunakan pernyataan EXISTS. Jika ya, notis dinaikkan dan penciptaan dilangkau. Jika tidak, peranan itu akan dibuat.

Pengoptimuman untuk Beban Kerja Berkontensi Tinggi

Untuk beban kerja yang sangat menimbulkan perbalahan, pengoptimuman selanjutnya boleh dibuat dengan meletakkan penyataan CREATE ROLE dalam blok bersarang:

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$;
Salin selepas log masuk

Blok bersarang ini memastikan bahawa peranan hanya dicipta jika keadaan perlumbaan yang tidak mungkin berlaku. Ini dengan ketara mengurangkan overhed prestasi yang dikaitkan dengan menaikkan dan menangkap pengecualian.

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

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan