ホームページ >データベース >mysql チュートリアル >PostgreSQL ロールがまだ存在しない場合にのみ作成する方法

PostgreSQL ロールがまだ存在しない場合にのみ作成する方法

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-20 02:37:09187ブラウズ

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

PostgreSQL ロール (ユーザー) が存在しない場合は作成します

問題:

CREATE ROLE ステートメントを使用した PostgreSQL ロールの作成ロールがすでに存在する場合はエラーが発生します。ロールが存在しない場合にのみロールを作成するにはどうすればよいですか?

解決策:

PL/pgSQL コード ブロックで DO ステートメントを使用してロールの作成を実行します。条件付き:

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

最適化:

潜在的な競合状態とパフォーマンスのオーバーヘッドを回避するには、例外処理メカニズム内でネストされたブロックの使用を検討してください:

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

以上がPostgreSQL ロールがまだ存在しない場合にのみ作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。