2011-10-03 5 views
0

JAVA를 사용하여 200 개 이상의 DROP 테이블 문이있는 함수를 호출 중이며 org.postgresql.util.PSQLException : ERROR : 공유 메모리가 부족합니다. 공유 memomry를 피하기 위해 어떤 접근 방식을 따라야합니까?org.postgresql.util.PSQLException : 오류 : 공유 메모리 없음 오류 :

추 신 : PostgresSQL과 관련된 매개 변수를 변경할 수 없다는 제한이 있습니다.

+0

"함수"는 서버 측 함수 또는 Java 메소드를 의미합니까? 예외의 _cause_는 서버 측 또는 클라이언트 측에서 발생합니까? 귀하의 작은 정보 비트는 추측에도 충분한 정보를 제공하지 않습니다. –

+0

함수 란 PostgresSQL 함수 (프로 시저)를 의미합니다. 예외는 자바 측에있는 함수를 호출하는 곳의 끝에 있습니다. –

답변

1

오류의 원인이 서버 측에있는 경우 : PostgreSQL에서 함수는 항상 트랜잭션 내에서 실행됩니다. DO 블록은 익명의 함수이며 같은 방식으로 처리됩니다. CREATE 또는 DROP과 같은 DML 명령도 PostgreSQL에서 트랜잭션 방식이므로이 명령은 ROLLBACKCOMMIT에 사용되는 일반적인 자원을 강조합니다.

내 추측으로는 엄청난 수의 큰 테이블을 삭제하면 많은 양의 메모리가 필요하다는 것입니다. 함수에서 트랜잭션 동작이 필요하지 않은 경우 가장 쉬운 방법은 큰 함수를 여러 개의 작은 함수로 분할하는 것입니다. 별도의 트랜잭션에서 각 함수를 호출하십시오.