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?
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?
Respuestas:
Para la versión actual de PostgreSQL (hasta 9.5), un backend recibe las consultas en un Stringinfo
bú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 N
es el tamaño de la consulta
Tenga en cuenta que una consulta a continuación 1GB
puede requerir que se analice, planifique o ejecute grandes cantidades de memoria, además de ese 1GB
búfer.
Si necesita insertar una gran serie de literales en una consulta, considere la alternativa de crear una tabla temporal, COPY
filas en ella y que la consulta principal haga referencia a esa tabla temporal.