¿Existe una restricción de longitud máxima para una consulta postgres?

33

La aplicación que estamos creando podría ejecutar consultas de inserción bastante grandes. ¿Hay algún límite en que mi consulta de postgres pueda tener solo un cierto número de caracteres?

Kannan Ramamoorthy
fuente
2
Solo diría que si incluso se está acercando a algún tipo de límite de esa naturaleza, necesitaría reconsiderar su diseño. He descubierto que, por lo general, cualquier consulta que se acerca se genera normalmente por algún tipo de marco (que implica una concatenación de cadenas extrema) y tienden a perder contacto con la realidad.
Vérace

Respuestas:

43

Para la versión actual de PostgreSQL (hasta 9.5), un backend recibe las consultas en un Stringinfobúfer, que se limita a MaxAllocSize, definido como:

#define MaxAllocSize   ((Size) 0x3fffffff) /* 1 gigabyte - 1 */

(ver http://doxygen.postgresql.org/memutils_8h.html )

Por lo tanto, una consulta está limitada a 1 gigabyte (2 ^ 30) de tamaño, menos 1 byte para un byte nulo de terminación.

Si un cliente intenta enviar una consulta más grande, volverá a aparecer un error similar al siguiente:

ERROR: sin memoria
DETALLE: No se puede ampliar el búfer de cadena que contiene 0 bytes por N más bytes.

donde Nes el tamaño de la consulta

Tenga en cuenta que una consulta a continuación 1GBpuede requerir que se analice, planifique o ejecute grandes cantidades de memoria, además de ese 1GBbúfer.

Si necesita insertar una gran serie de literales en una consulta, considere la alternativa de crear una tabla temporal, COPYfilas en ella y que la consulta principal haga referencia a esa tabla temporal.

Daniel Vérité
fuente