web-dev-qa-db-fra.com

Existe-t-il une contrainte de longueur maximale pour une requête postgres?

L'application que nous construisons peut exécuter des requêtes d'insertion assez importantes. Y a-t-il une limite que ma requête postgres ne puisse avoir qu'un certain nombre de caractères?

33

Pour la version PostgreSQL actuelle (jusqu'à 9.5), les requêtes sont reçues par un backend dans un tampon Stringinfo, qui est limité à MaxAllocSize, défini comme:

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

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

Ainsi, une requête est limitée à 1 gigaoctet (2 ^ 30) en taille, moins 1 octet pour un octet nul final.

Si un client essayait d'envoyer une requête plus volumineuse, une erreur ressemblant à ceci reviendrait:

ERREUR: mémoire insuffisante
DÉTAIL: Impossible d'agrandir le tampon de chaîne contenant 0 octet par [~ # ~] n [~ # ~] plusieurs octets.

N est la taille de la requête.

Sachez qu'une requête juste en dessous de 1GB peut nécessiter l'analyse, la planification ou l'exécution de grandes quantités de mémoire, en plus de cela 1GB tampon.

Si vous avez besoin de pousser une grande série de littéraux dans une requête, envisagez l'alternative de créer une table temporaire, COPY lignes dedans et que la requête principale fasse référence à cette table temporaire.

43
Daniel Vérité