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!