我正在尝试设置一个开发PostgreSQL服务器。它正在运行,我可以从命令行创建角色,表等。但是,当我尝试使用Play应用evolution时,我收到以下错误:
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 -
谢谢!
答案 0 :(得分:5)
允许的连接数在postgresql.conf
中设置为GUC(“Grand Unified Configuration”)max_connections
。默认值为100。
但是在你修改设置之前,你必须问问自己:在你的集群达到极限之前,所有其他100个连接的来源是什么?这通常指向您的安装或程序中的错误!
你可能也对Postgres Wiki中的connection pooling和article about The Number of Connections感兴趣。
答案 1 :(得分:3)
Postgres.app默认为max_connections = 10.请参阅~/Library/Application Support/Postgres/var/postgresql.conf
。
我通过将max_connections增加到50来修复此问题。在Mountain Lion上,我还必须将shared_buffers减少到500kB以便Postgres启动。
答案 2 :(得分:2)
您可以减少应用程序使用的连接数。在mac安装上有相同的错误。如official documentation:
所示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