2012-11-27 11 views
11

Ho scritto un codice java per l'inserimento di massa. Sto usando il comando di copia per l'importazione e la creazione di diversi oggetti di connessione per le tabelle diverse, ma durante l'esecuzione, il programma si sta gettando i seguenti errori:Come risolvere FATAL: limite di connessione superato per i non-superuser

FATAL: connection limit exceeded for non-superusers 
+2

La mia scommessa è che non stai chiudendo le connessioni correttamente dal tuo codice Java. –

+0

Stai per caso creando una nuova connessione per ogni inserto? – lawl0r

risposta

5

Si sta utilizzando un pool di connessioni? Controlla se le connessioni sono chiuse correttamente nel tuo codice. Questo dovrebbe essere fatto in un blocco try-finally:

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

Se davvero bisogno di una grande quantità di collegamenti, impostare la max_connections-Proprietà di postres conseguenza.

Documentation

12

È stato superato il limite di connessione di server PostgreSQL. Ci sono alcune connessioni riservate per Super utente.

Per aumentare il limite di connessione è necessario modificare il postgresql.conf (predefinito 100) si trova nella directory dei dati di PostgreSQL.

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) 

Aumentare il limite e riavviare l'istanza PostgreSQL.

Avvertenza: l'aumento del limite di connessione influirà sulla memoria.

provare a ottimizzare la connessione utilizzando il pool di connessioni nell'applicazione o nel livello db. su PostgreSQL è possibile utilizzare Pgpool2.

+0

Oppure puoi provare ad uccidere le connessioni. – Noumenon

Problemi correlati