首页 >数据库 >mysql教程 >仅当 PostgreSQL 角色尚不存在时,如何创建它?

仅当 PostgreSQL 角色尚不存在时,如何创建它?

Linda Hamilton
Linda Hamilton原创
2024-12-20 02:37:09145浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn