在 RDS 中运行的 Postgres 只能通过 EKS 集群访问……因此我的集群中有一个(通用)pod,它允许我访问我们的 postgres 实例。我需要更改我当前正在使用/以(root 用户)身份登录的角色的密码。问题是,当我尝试提醒用户或角色时,postgres 说用户/角色不存在,即使我可以清楚地看到它并且我以用户身份登录!我以 root(操作系统级别)身份登录到 postgres,并且我是 postgres root 用户(不是 postgres,而是我将ABcDeFGh
在这个问题中调用的超级用户)
postgres=> select user;
user
----------
ABcDeFGh
(1 row)
postgres=> select rolname, rolsuper from pg_roles;
rolname | rolsuper
---------------------------+----------
pg_monitor | f
pg_read_all_settings | f
pg_read_all_stats | f
pg_stat_scan_tables | f
pg_read_server_files | f
pg_write_server_files | f
pg_execute_server_program | f
pg_signal_backend | f
rds_superuser | f
rds_replication | f
rds_iam | f
rds_password | f
rds_ad | f
rdsadmin | t
ABcDeFGh | f
rdsrepladmin | f
rdstopmgr | f
(20 rows)
我登录的用户是 ABcDeFGh。甚至是特定的查询(顺便说一句,我不是 postgres 人)
postgres=> \dg ABcDeFGh
List of roles
Role name | Attributes | Member of
-----------+------------+-----------
postgres=> \dg abcdefgh
List of roles
Role name | Attributes | Member of
-----------+------------+-----------
postgres=> \du abcdefgh
List of roles
Role name | Attributes | Member of
-----------+------------+-----------
postgres=> \du ABcDeFGh
List of roles
Role name | Attributes | Member of
-----------+------------+-----------
但是这个(列表被截断):
postgres=> \du
List of roles
Role name | Attributes | Member of
---------------------+------------------------------------------------------------+-------------------------------------------------------------
ABcDeFGh | Create role, Create DB +| {rds_superuser}
| Password valid until infinity |
这个(列表被截断):
postgres=> \dg
List of roles
Role name | Attributes | Member of
---------------------+------------------------------------------------------------+-------------------------------------------------------------
ABcDeFGh | Create role, Create DB +| {rds_superuser}
| Password valid until infinity |
(现在我刚刚注意到\du
并且\dg
是同一件事或似乎是彼此的别名)
所以这是非常令人困惑和沮丧的。alter
如您所见,我对 and 使用了全小写和区分大小写的名称\dg
。尝试更改密码时出现的错误是role
或者user
不存在。它显然似乎存在。
alter role 'ABcDeFGh' with password '<REDACTED>' valid until '2023-01-02T00:13:34+00:00';
ERROR: syntax error at or near "'ABcDeFGh'"
我能找到的所有文档都无法解释这里可能发生的事情。用户显然存在,因为我以用户身份登录。我真的很讨厌把时间浪费在这种来自软件的模棱两可的垃圾上。
由于您(或其他人)已经设法创建了一个区分大小写名称的角色,因此您现在必须每次都引用它以防止 Postgres 将其转换为小写:
或者