在过去的一天里,我经常遇到这个错误,这导致需要重置云实例才能继续连接:
ERROR: unrecognized configuration parameter "cloudsql.enable_instance_password_validation"
这是在PostgreSQL 14 GCP Cloud SQL社区共享的1 vCPU,0.614 GB实例上运行的,但也在问题持续存在的标准1 vCPU 3.7 GB实例上进行了测试。
自此事件发生以来,唯一更改的代码是使用Golang PGX池接口的侦听/通知调用,该调用已被还原,问题仍然存在。
任何数据库调用(在重置后30分钟内(都会定期出现问题,并且我没有设置任何涉及";enable_instance_password_validation"-我也找不到任何涉及此名称的参数。
这是一个有趣的问题,@enocom正确地指出Postgresql中出现的错误是转移注意力。在整个过程中,由于Go服务器实例和Postgresql服务器之间的问题,出现了一些问题。
崩溃的真正原因是用于与Postgres数据库交互的Golang PGX池接口默认情况下的最大"DBMaxPools"上限为14个连接。当我们连接到这个数量时,服务器挂起,没有任何错误日志,所有进一步的连接都会被永久拒绝。
要解决这个问题,只需要在调用时在dbURI中添加一个"pool_max_conns">
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云运行实例,这可以在部署修订中的"每个容器的最大请求数"下进行设置