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?
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.
où 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.