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
相关产品推荐
相关产品推荐

