2012-12-27 10 views
8

Próbuję skonfigurować serwer PostgreSQL. Działa i mogę tworzyć role, tabele itp. Z wiersza poleceń. Jednak przy próbie zastosowania ewolucje z użyciem Play, pojawia się następujący błąd:Ewolucje PostgreSQL: "PSQLException: FATAL: przepraszam, zbyt wielu klientów już"

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

jestem w stanie połączyć się i jeśli mogę umieścić w błąd składni na celu, zwraca błąd składni, więc wiem, że gra jest w stanie połączyć się z bazą danych. Jednak po pomyślnym wprowadzeniu ewolucji otrzymuję błąd pokazany powyżej.

Nie jestem zbyt dobrze zorientowany w administracji PostgreSQl, więc nie jestem pewien, czy problem dotyczy Play czy mojej instalacji PostgreSQL. Właśnie zainstalowałem go za pomocą Heroku's Postgres.app na komputerze Mac z systemem Mountain Lion.

Oto co jest wpisywane do konsoli:

! @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 - 

Dzięki!

Odpowiedz

2

Możesz zmniejszyć liczbę połączeń używanych przez aplikację. Miał te same błędy w instalacji mac. Jak pokazano na 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 
+0

Ustawiłem te ustawienia w moim pliku application.conf, ale wciąż otrzymuję ten sam wynik. W przeszłości łączyłem się z PostgreSQL z Play i nigdy nie miałem tego problemu, jestem naprawdę zakłopotany. – Ryan

5

Liczba dozwolonych połączeń jest ustawiona na postgresql.conf z GUC ("Wielka konfiguracja Unified") max_connections. Domyślnie jest to 100.

Ale zanim zaczniesz majstrować przy ustawieniu, musisz zadać sobie pytanie: skąd się wzięły te wszystkie pozostałe 100 połączeń, zanim twoja klastra osiągnie limit? Zazwyczaj wskazuje to na błąd w Twojej instalacji lub programie!

Możesz również być zainteresowany connection pooling i tym article about The Number of Connections na Wiki Postgres.

+0

Jest to waniliowa instalacja PostgreSQL i zupełnie nowy projekt Play 2.0.4. Wszystko, co do tej pory miałem, to niektóre modele. Czy jest dziennik, w którym mogę się dowiedzieć, skąd pochodzą inne połączenia? – Ryan

+0

@Ryan: Możesz ustawić PostgreSQL, aby logować prawie wszystko. [Zacznij od przeczytania podręcznika tutaj] (http://www.postgresql.org/docs/current/interactive/runtime-config-logging.html). –

3

Postgres.app domyślnie na max_connections = 10. Patrz ~/Library/Application Support/Postgres/var/postgresql.conf.

Naprawiłem to poprzez zwiększenie max_connections do 50. Na Mountain Lion musiałem również zmniejszyć shared_buffers do 500kB dla PostgreSQL, aby rozpocząć.

Powiązane problemy