Postgresql 错误:无法建立连接
Posted
技术标签:
【中文标题】Postgresql 错误:无法建立连接【英文标题】:Postgresql ERROR: could not establish connection 【发布时间】:2020-08-28 22:21:51 【问题描述】:刚接触 RDS PostgreSQL 并尝试创建一个新用户来接管以前的用户。
1:因为新用户不是超级用户,所以我必须在删除之前按照these instructions重新分配之前的用户对象,如下:
CREATE ROLE TempUser WITH PASSWORD 'temppass' LOGIN;
2:让 TempUser 成为新老用户的一部分
GRANT OldUser TO TempUser;
GRANT NewUser TO TempUser;
3:为每个数据库(循环)重新分配 OldUser 对象和 Drop Owned:
SELECT DBLINK('dbname=some_db user=TempUser password=temppass host=localhost', 'REASSIGN OWNED BY OldUser TO NewUser; DROP OWNED BY OldUser;');
第 3 步是错误发生的地方。
ERROR: could not establish connection
当我在函数中运行上述代码时会发生错误。但是当我手动执行这些步骤时,它可以工作。 该函数位于当前服务器的 Db 中。
当我手动运行并且它工作时,我在 MasterUser(服务器的创建者)的上下文中运行。
但是,如果我尝试在上面的 dblink 中使用 masteruser 凭据,在函数中运行时,我会收到此错误:
permission denied to reassign objects
我还尝试向 TempUser 授予以下权限:
GRANT CONNECT ON DATABASE some_db TO TempUser;
GRANT ALL PRIVILEGES ON DATABASE some_db TO TempUser;
但是没有用。
对此的任何帮助表示赞赏。
谢谢
【问题讨论】:
【参考方案1】:在没有超级用户帐户的情况下使用REASSIGN
时存在一些非常不直观的权限要求(如在 RDS on Cloud SQL 上)。我很惊讶它实际上对您使用 masteruser 有用,除非 masteruser 以某种方式是超级用户?基本上,为了重新分配为主用户,我认为你必须 GRANT old_user TO masteruser
和 GRANT new_user TO masteruser
(即使 masteruser 是创建它们的人 - 如果他们碰巧这可能需要撤销他们两个的 masteruser masteruser 的成员 - 请参阅相关答案,例如:https://***.com/a/62557497/79079)
但是,我认为您也应该能够重新分配 as new_user
,如果您首先使用 GRANT old_user TO new_user
- 那么唯一的技巧就是以 new_user
建立连接,这可能需要GRANT CONNECT ON DATABASE x TO new_user
不确定这是否是完整的答案,但希望它可以帮助您朝着正确的方向前进!
【讨论】:
以上是关于Postgresql 错误:无法建立连接的主要内容,如果未能解决你的问题,请参考以下文章
PostGIS 版本阻止了 Amazon RDS 上的 PostgreSQL 升级
Docker:Springboot 容器无法连接到 PostgreSql 容器连接错误
TestContainers 和错误:“无法验证连接 org.postgresql.jdbc.PgConnection”(为所有测试类提升单个容器)