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 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.