Existe uma restrição de tamanho máximo para uma consulta postgres?

33

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?

Kannan Ramamoorthy
fonte
2
Eu diria apenas que, se você estiver chegando a algum tipo de limite dessa natureza, precisará reconsiderar seu design. Descobri que, geralmente, quaisquer consultas que se aproximam são normalmente geradas por algum tipo de estrutura (envolvendo extrema concatenação de cadeias) e tendem a perder o contato com a realidade.
Vérace 6/03/16

Respostas:

43

Para a versão atual do PostgreSQL (até 9.5), as consultas são recebidas por um back-end em um Stringinfobuffer, 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 1GBpode exigir que grandes quantidades de memória sejam analisadas, planejadas ou executadas, além desse 1GBbuffer.

Se você precisar enviar uma grande série de literais para uma consulta, considere a alternativa de criar uma tabela temporária, COPYlinhas nela e faça com que a consulta principal se refira a essa tabela temporária.

Daniel Vérité
fonte