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

PostgreSQL中仅在用户不存在时创建用户的语法错误问题

PostgreSQL 条件创建用户的语法错误修复

第一段SQL的问题与修复

原语句核心问题有两个:

  • 生成的CREATE USER语句中,密码未用单引号包裹;在SQL字符串中嵌套单引号时,必须用两个单引号完成转义
  • 查询条件里的用户名与目标创建用户不匹配,属于笔误

错误代码:

SELECT 'CREATE USER konguser WITH ENCRYPTED PASSWORD kongpassword' 
WHERE NOT EXISTS (SELECT FROM pg_user WHERE usename = 'kongdb')\gexec

修正后代码:

SELECT 'CREATE USER konguser WITH ENCRYPTED PASSWORD ''kongpassword''' 
WHERE NOT EXISTS (SELECT FROM pg_user WHERE usename = 'konguser')\gexec

第二段SQL的问题与修复

原语句存在两处语法错误:

  • PostgreSQL的PL/pgSQL块不支持echo命令,需用RAISE NOTICE输出提示信息
  • 报错中的"168"属于粘贴时的格式混乱,修正语法后即可消除

错误代码:

DO
$$
BEGIN
   IF NOT EXISTS ( SELECT FROM pg_user
                   WHERE  usename = 'konguser') THEN

      CREATE USER konguser WITH ENCRYPTED PASSWORD 'kongpassword';
      GRANT ALL PRIVILEGES ON DATABASE kongdb TO konguser;
      echo "test database & user successfully created"
   END IF;
END
$$;

修正后代码:

DO
$$
BEGIN
   IF NOT EXISTS (SELECT FROM pg_user WHERE usename = 'konguser') THEN
      CREATE USER konguser WITH ENCRYPTED PASSWORD 'kongpassword';
      GRANT ALL PRIVILEGES ON DATABASE kongdb TO konguser;
      RAISE NOTICE 'test database & user successfully created';
   END IF;
END
$$;

内容的提问来源于stack exchange,提问作者Jon Zuelgaray

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 11:26:01