2012-11-27 3 views
11

대량 삽입을위한 Java 코드를 작성했습니다. I 가져 오기 및 다른 테이블에 대해 서로 다른 연결 개체를 만들기위한 복사 명령을 사용하고 있지만, 실행하는 동안, 프로그램은 다음과 같은 오류를 던지고있다 :FATAL : 비 슈퍼 유저의 연결 제한을 초과했습니다.

FATAL: connection limit exceeded for non-superusers 
+2

내 코드는 Java 코드 내에서 연결을 제대로 닫지 않았기 때문입니다. –

+0

우연히 모든 삽입물에 대해 새로운 연결을 생성하고 있습니까? – lawl0r

답변

5

당신이 연결 풀을 사용하고 있습니까? 코드에서 연결이 제대로 닫혔는지 확인하십시오. try-finally 블록에서 수행해야합니다.

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

실제로 많은 양의 연결이 필요한 경우 이에 따라 포스트에 max_connections-property를 설정하십시오.

Documentation

12

당신은 PostgreSQL 서버의 연결 제한을 초과했습니다. 수퍼 유저에게는 예약 된 연결이 있습니다.

연결 제한을 늘리려면 postgresql.conf (기본값 100) 을 변경해야합니다.이 값은 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) 

PostgreSQL 인스턴스를 다시 시작하고 다시 시작하십시오.

경고 : 연결 제한을 늘리면 메모리가 영향을받습니다.

응용 프로그램 또는 db 계층에서 연결 풀링을 사용하여 연결을 최적화하십시오. PostgreSQL의 에 Pgpool2을 사용할 수 있습니다.

+0

또는 연결을 종료 할 수 있습니다. – Noumenon

관련 문제