仅当用户不存在时,我才尝试使用以下命令在 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
您的第一次尝试完全没问题 - 只是
"
不是在那里使用的正确引号,并且 '
可能与您围绕查询的引号匹配。如果您需要在文本文字中使用 '
,请将外部单引号替换为双引号:
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
$$;