You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PostgreSQL中实现与SQL Server等效的CREATE DATABASE权限检查

PostgreSQL校验CREATE DATABASE权限实现方案

PostgreSQL没有内置与SQL Server HAS_PERMS_BY_NAME 完全等效的函数,你可以通过以下两种方式实现需求:

  • 直接查询系统目录校验
    校验当前用户权限的查询语句如下:
    SELECT rolcreatedb OR rolsuper AS has_create_database_perm
    FROM pg_roles
    WHERE rolname = current_user;
    
    返回值为t即有权限,f即无权限。如果要校验指定角色,将current_user替换为对应角色名的字符串即可。
  • 封装自定义函数复用
    可以封装一个类似HAS_PERMS_BY_NAME的自定义函数,方便后续直接调用:
    CREATE OR REPLACE FUNCTION has_perms_by_name(role_name text DEFAULT NULL, obj_type text DEFAULT NULL, perm text DEFAULT NULL)
    RETURNS boolean
    LANGUAGE plpgsql
    AS $function$
    BEGIN
      IF obj_type = 'DATABASE' AND perm = 'CREATE DATABASE' THEN
        role_name := COALESCE(NULLIF(role_name, ''), current_user);
        RETURN EXISTS (
          SELECT 1 FROM pg_roles
          WHERE rolname = role_name AND (rolcreatedb OR rolsuper)
        );
      END IF;
      RAISE EXCEPTION '暂不支持该类型权限校验,可按需扩展函数逻辑';
    END;
    $function$;
    
    调用方式和SQL Server原用法完全一致:
    SELECT has_perms_by_name(NULL, 'DATABASE', 'CREATE DATABASE');
    

内容的提问来源于stack exchange,提问作者Mykyta Halchenko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 11:36:03