如何在postgresql中不存在的情况下创建用户?

问题描述 投票:0回答:1

仅当用户不存在时,我才尝试使用以下命令在 postgresql 数据库中创建用户:

postgres=> SELECT 'CREATE USER konguser WITH ENCRYPTED PASSWORD kongpassword' WHERE NOT EXISTS (SELECT FROM pg_user WHERE usename = 'kongdb')\gexec
ERROR:  syntax error at or near "kongpassword"
LINE 1: CREATE USER konguser WITH ENCRYPTED PASSWORD kongpassword

使用“ ”或“”之间的密码仍然失败

我还尝试使用以下代码:

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
$$;

结果如下:

ERROR:  syntax error at or near "168"
LINE 2: 168
postgresql syntax-error createuser
1个回答
0
投票

您的第一次尝试完全没问题 - 只是

"
不是在那里使用的正确引号,并且
'
可能与您围绕查询的引号匹配。如果您需要在文本文字中使用
'
,请将外部单引号替换为双引号:

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

此外,您尝试在

konguser
不存在(即不同的用户)的情况下创建
kongdb

您的第二次尝试也完全有效,除了

echo

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"
      RAISE NOTICE 'test user successfully created';
   ELSE
      RAISE NOTICE 'test user already exists';
   END IF;
END
$$;
© www.soinside.com 2019 - 2024. All rights reserved.