首頁 > 資料庫 > mysql教程 > 如果 PostgreSQL 角色尚不存在,如何安全地建立它?

如果 PostgreSQL 角色尚不存在,如何安全地建立它?

Patricia Arquette
發布: 2024-12-28 19:54:11
原創
929 人瀏覽過

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

如何建立不存在的PostgreSQL ROLE

在PostgreSQL 9.1 中,使用CREATE ROLE my_user LOGIN 等簡單腳本建立不存在的ROLE如果使用者已存在,則PWLOGINORDORD 'my_password' 可能會失敗。為了避免這個錯誤,需要更複雜的方法。

使用DO 語句的解決方案

一個有效的解決方案是在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$;
登入後複製

此腳本使用EXISTS 語句檢查角色是否已存在。如果是,則會發出通知並跳過建立。否則,將創建角色。

針對高爭用工作負載的最佳化

對於高爭用工作負載,可以透過在巢狀區塊中嵌套CREATE ROLE 語句來進行進一步最佳化:

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板