저는 파이썬과 psycopg2를 사용하여 많은 쿼리를 실행하고 있습니다. 나는 하나의 커다란 임시 테이블을 만들거나, 약 2 백만 행을 만들고 나서, cur.fetchmany(1000)
을 사용하여 한 번에 1000 행을 얻고, 그 행들을 포함하는 더 광범위한 쿼리를 실행한다. 광범위한 쿼리는 자급 자족합니다. 일단 완료되면 다음 1000 단계로 넘어갈 때 더 이상 결과가 필요하지 않습니다.postgresql : 공유 메모리가 부족합니까?
그러나 약 1000000 행은 psycopg2에서 예외가 있습니다.
psycopg2.OperationalError: out of shared memory
HINT: You might need to increase max_locks_per_transaction.
재미있게도 충분히 광범위한 쿼리가 생성 된 임시 테이블을 삭제하기 위해 쿼리를 실행했을 때 이런 일이 발생했습니다.
왜 이런 일이 발생할 수 있습니까? 그것을 피할 수있는 방법이 있습니까? 이 일이 중간에 일어난 것은 짜증나, 다시 말해야 만합니다. max_locks_per_transaction
은 무엇을해야합니까?
참고 : 나는 .commit()
을 수행하고 있지는 않지만 작성한 임시 테이블을 모두 삭제하고 있으며 각 "광범위한"트랜잭션에 대해 동일한 5 개의 테이블 만 만지기 때문에 테이블 잠금이 부족하면 문제가 될 수 있습니다.
트랜잭션을 커서 및 .commits로 어떻게 변환합니까? 나는 어떤 .commit도하지 않았지만 쿼리를 위해 새로운 커서를 사용했다. – Claudiu