O aplicativo que estamos construindo pode executar consultas de inserção bastante grandes. Existe um limite para que minha consulta postgres possa ter apenas um certo número de caracteres?
O aplicativo que estamos construindo pode executar consultas de inserção bastante grandes. Existe um limite para que minha consulta postgres possa ter apenas um certo número de caracteres?
Respostas:
Para a versão atual do PostgreSQL (até 9.5), as consultas são recebidas por um back-end em um Stringinfo
buffer, limitado a MaxAllocSize
, definido como:
#define MaxAllocSize ((Size) 0x3fffffff) /* 1 gigabyte - 1 */
(consulte http://doxygen.postgresql.org/memutils_8h.html )
Portanto, uma consulta é limitada a 1 gigabyte (2 ^ 30) de tamanho, menos 1 byte para um byte nulo final.
Se um cliente tentar enviar uma consulta maior, um erro parecido com este retornaria:
ERRO: falta de memória
DETALHE: Não é possível aumentar o buffer da cadeia contendo 0 bytes por mais N bytes.
onde N
é o tamanho da consulta.
Esteja ciente de que uma consulta logo abaixo 1GB
pode exigir que grandes quantidades de memória sejam analisadas, planejadas ou executadas, além desse 1GB
buffer.
Se você precisar enviar uma grande série de literais para uma consulta, considere a alternativa de criar uma tabela temporária, COPY
linhas nela e faça com que a consulta principal se refira a essa tabela temporária.