在过去的一天里,我经常遇到这个错误,导致需要重置云实例才能继续连接:
ERROR: unrecognized configuration parameter "cloudsql.enable_instance_password_validation"这是在一个PostgreSQL 14 GCP社区上运行的,共享1 vCPU,0.614 GB实例,但也在问题持续存在的标准1 vCPU,3.7GB实例上进行了测试。
自发生此事件以来,唯一更改的代码是一个带有Golang池接口的侦听/通知调用,该接口已被恢复,并且问题仍然存在。
这个问题经常发生在任何数据库调用(重置后30分钟内),而且我没有设置任何涉及"enable_instance_password_validation“的内容--我也无法找到任何涉及该名称的参数。
发布于 2022-04-30 06:29:53
这是一个有趣的问题,@enocom指出Postgresql中的错误是一个红色鲱鱼,这是正确的。在整个过程中,由于Go服务器实例和Postgresql服务器都存在问题,出现了一些红斑鱼。
造成这些崩溃的真正原因是,用于与Postgres交互的Golang池接口默认最大“DBMaxPools”上限为14个连接。当我们到达这个数目的连接时,服务器挂起,没有任何错误日志,所有进一步的连接都会被永久拒绝。
要解决这个问题,只需在调用时在dbURI中添加一个‘dbURI’:
dbPool, err := pgxpool.Connect(context.Background(), dbURI)这可以通过这样的方法来完成:
dbURI = fmt.Sprintf(`postgresql://%s:%s@%s:%s/%s?pool_max_conns=%s`, config.DBUser, config.DBPassword, config.DBAddress, config.DBPort, config.DBName, config.DBMaxPools)详细说明可在这里找到:pgxpool包信息
当设置PGX时,请确保将此数字设置为与服务器实例的最大并发连接相同或类似的数字,以避免再次发生这种情况。对于GCP云运行实例,可以在部署修订中将其设置为“每个容器的最大请求”
https://stackoverflow.com/questions/71863220
复制相似问题