PostgreSQL 演变:“PSQLException:致命:抱歉,已经有太多客户端了”

问题描述 投票:0回答:3

我正在尝试设置一个开发 PostgreSQL 服务器。它正在运行,我可以从命令行创建角色、表等。但是,当我尝试使用 Play 应用进化时,出现以下错误:

org.postgresql.util.PSQLException: FATAL: sorry, too many clients already

我能够连接,如果我故意输入语法错误,它会返回语法错误,因此我知道 Play 能够连接到数据库。然而,在成功应用进化后,我收到了上面显示的错误。

我不太熟悉 PostgreSQl 管理,所以我不确定问题是出在 Play 还是我的 PostgreSQL 安装上。我刚刚在运行 Mountain Lion 的 Mac 上使用 Heroku 的 Postgres.app 安装了它。

以下是写入控制台的内容:

! @6cnb0blpp - Internal server error, for request [GET /] ->

play.api.db.evolutions.InvalidDatabaseRevision: Database 'default' needs evolution! [An SQL script need to be run on your database.]
    at play.api.db.evolutions.EvolutionsPlugin$$anonfun$onStart$1$$anonfun$apply$1.apply$mcV$sp(Evolutions.scala:427) ~[play_2.9.1.jar:2.0.4]
    at play.api.db.evolutions.EvolutionsPlugin.withLock(Evolutions.scala:448) ~[play_2.9.1.jar:2.0.4]
    at play.api.db.evolutions.EvolutionsPlugin$$anonfun$onStart$1.apply(Evolutions.scala:414) ~[play_2.9.1.jar:2.0.4]
    at play.api.db.evolutions.EvolutionsPlugin$$anonfun$onStart$1.apply(Evolutions.scala:412) ~[play_2.9.1.jar:2.0.4]
    at scala.collection.LinearSeqOptimized$class.foreach(LinearSeqOptimized.scala:59) ~[scala-library.jar:0.11.3]
    at scala.collection.immutable.List.foreach(List.scala:45) ~[scala-library.jar:0.11.3]
[error] c.j.b.h.AbstractConnectionHook - Failed to acquire connection Sleeping for 1000ms and trying again. Attempts left: 10. Exception: null
[error] c.j.b.h.AbstractConnectionHook - Failed to acquire connection Sleeping for 1000ms and trying again. Attempts left: 9. Exception: null
[error] c.j.b.h.AbstractConnectionHook - Failed to acquire connection Sleeping for 1000ms and trying again. Attempts left: 8. Exception: null
[error] c.j.b.h.AbstractConnectionHook - Failed to acquire connection Sleeping for 1000ms and trying again. Attempts left: 7. Exception: null
[error] c.j.b.h.AbstractConnectionHook - Failed to acquire connection Sleeping for 1000ms and trying again. Attempts left: 6. Exception: null
[error] c.j.b.h.AbstractConnectionHook - Failed to acquire connection Sleeping for 1000ms and trying again. Attempts left: 5. Exception: null
[error] c.j.b.h.AbstractConnectionHook - Failed to acquire connection Sleeping for 1000ms and trying again. Attempts left: 4. Exception: null
[error] c.j.b.h.AbstractConnectionHook - Failed to acquire connection Sleeping for 1000ms and trying again. Attempts left: 3. Exception: null
[error] c.j.b.h.AbstractConnectionHook - Failed to acquire connection Sleeping for 1000ms and trying again. Attempts left: 2. Exception: null
[error] c.j.b.h.AbstractConnectionHook - Failed to acquire connection Sleeping for 1000ms and trying again. Attempts left: 1. Exception: null
[error] application - 

谢谢!

postgresql scala playframework-2.0
3个回答
6
投票

允许的连接数在

postgresql.conf
中通过 GUC(“大统一配置”)
max_connections
设置。默认值为 100。

但是在修改设置之前,您必须问自己:在您的集群达到限制之前,所有其他 100 个连接来自哪里?这通常表明您的安装或程序中存在错误!

您可能还对 连接池 以及 Postgres Wiki 中的有关连接数的文章感兴趣。


4
投票

Postgres.app 默认 max_connections = 10。请参阅

~/Library/Application Support/Postgres/var/postgresql.conf

我通过将 max_connections 增加到 50 来解决这个问题。在 Mountain Lion 上,我还必须将共享缓冲区减少到 500kB,以便 Postgres 启动。


2
投票

您可以减少应用程序使用的连接数量。 mac安装时也出现同样的错误。如官方文档所示:

db.default.partitionCount=2

# The number of connections to create per partition. Setting this to 
# 5 with 3 partitions means you will have 15 unique connections to the 
# database. Note that BoneCP will not create all these connections in   
# one go but rather start off with minConnectionsPerPartition and 
# gradually increase connections as required.
db.default.maxConnectionsPerPartition=5

# The number of initial connections, per partition.
db.default.minConnectionsPerPartition=5
© www.soinside.com 2019 - 2024. All rights reserved.