답변:
현재 PostgreSQL 버전 (최대 9.5)의 경우 다음과 같이 정의 된 Stringinfo
버퍼 로 백엔드가 쿼리를받습니다 MaxAllocSize
.
#define MaxAllocSize ((Size) 0x3fffffff) /* 1 gigabyte - 1 */
( http://doxygen.postgresql.org/memutils_8h.html 참조 )
따라서 쿼리의 크기는 1 기가 바이트 (2 ^ 30)로 제한되며 종료 널 바이트의 경우 1 바이트를 뺀 것입니다.
클라이언트가 더 큰 쿼리를 보내려고하면 다음과 같은 오류가 다시 발생합니다.
오류 : 메모리 부족
세부 정보 : 0 바이트를 포함하는 문자열 버퍼를 N 바이트 이상 확대 할 수 없습니다 .
N
쿼리 크기는 어디에 있습니까 ?
바로 아래 쿼리 1GB
는 해당 1GB
버퍼 외에 많은 양의 메모리를 구문 분석, 계획 또는 실행해야 할 수도 있습니다 .
일련의 리터럴을 쿼리로 푸시해야하는 경우 임시 테이블을 생성하는 대안을 고려 COPY
하고 기본 쿼리가 해당 임시 테이블을 참조하도록하십시오.