2012-11-27 14 views
11

Ich habe einen Java-Code für Masseneinfügung geschrieben. Ich bin mit dem Kopierbefehl für den Import und andere Verbindungsobjekte für verschiedene Tabellen zu erstellen, aber während der Ausführung des Programm es die folgenden Fehler wirft:So beheben Sie FATAL: Verbindungslimit überschritten für Nicht-Superuser

FATAL: connection limit exceeded for non-superusers 
+2

Meine Wette ist, dass Sie die Verbindungen nicht ordnungsgemäß aus Ihrem Java-Code schließen. –

+0

Erstellen Sie zufällig eine neue Verbindung für jeden Einsatz? – lawl0r

Antwort

5

Sie einen Verbindungspool mit? Überprüfen Sie, ob die Verbindungen in Ihrem Code ordnungsgemäß geschlossen sind.

Connection connection = dataSource.getConnection(); 
try { 
    .... 
} 
finally { 
    connection.close(); 
} 

Wenn Sie wirklich eine große Menge an Verbindungen benötigen, setzen Sie die max_connections-Eigenschaft in postres dementsprechend: Dies sollte in einem Try-finally-Block durchgeführt werden.

Documentation

12

Sie haben das Verbindungslimit von PostgreSQL-Server überschritten. Es gibt einige reservierte Verbindungen für Super User.

Um das Verbindungslimit zu erhöhen, müssen Sie die postgresql.conf (Standard 100) in Ihrem PostgreSQL-Datenverzeichnis ändern.

cat postgresql.conf | grep max_connection max_connections = 100 
     # (change requires restart) 
# Note: Increasing max_connections costs ~400 bytes of shared memory per 
# max_locks_per_transaction * (max_connections + max_prepared_transactions) 

Erhöhen Sie das Limit und starten Sie die PostgreSQL-Instanz neu.

Warnung: Das Erhöhen der Verbindungsbeschränkung wirkt sich auf den Speicher aus.

versuchen Sie, die Verbindung über das Verbindungspooling entweder in der Anwendung oder in der db-Schicht zu optimieren. auf PostgreSQL können Sie Pgpool2 verwenden.

+0

Oder Sie können versuchen, die Verbindungen zu töten. – Noumenon

Verwandte Themen