我试图添加新用户" svcUatOlapEdw"到运行PSQL 9.4的现有RHEL 7服务器。
使用inet身份验证(su-postgres之后)并在PSQL提示符下工作,如下所示:
-bash-4.2$ psql
psql (9.4.6)
Type "help" for help.
postgres=#
我成功执行的命令是:
CREATE USER svcUatOlapEdw
GRANT readonly to svcUatOlapEdw
但是,在尝试从客户端进行连接时,我得到了:
-bash-4.1$ psql -h myserver -d postgres -U svcUatOlapEdw -W
Password for user svcUatOlapEdw:
psql: FATAL: role "svcUatOlapEdw" does not exist
我不确定我在这里做错了什么 - 我们将不胜感激。
此外,我也尝试过:
CREATE ROLE svcUatOlapEdw
也没有解决问题。
由于
答案 0 :(得分:2)
Postgres中的不带引号的标识符为folded to lower case。因此,CREATE USER svcUatOlapEdw
会创建名为svcuatolapedw
的用户。您通过SQL语句传递的任何标识符也会折叠为小写,这就是GRANT readonly to svcUatOlapEdw
工作的原因(它被执行为GRANT readonly to svcuatolapedw
)。
但是,psql
会按“原样”传递用户名,并尝试使用名为"svcUatOlapEdw"
的用户登录。您需要以小写字母传递用户名:
psql -h myserver -d postgres -U svcuatolapedw -W
修改强>
如果要创建具有大写/小写名称的用户,则必须使用带引号的标识符:
CREATE USER "svcUatOlapEdw";
GRANT readonly to "svcUatOlapEdw";