L'application que nous construisons peut exécuter de très grosses requêtes d'insertion. Y a-t-il une limite à ce que ma requête postgres ne puisse contenir qu'un certain nombre de caractères?
postgresql
Kannan Ramamoorthy
la source
la source
Réponses:
Pour la version actuelle de PostgreSQL (jusqu'à la version 9.5), les requêtes sont reçues par un serveur dans un
Stringinfo
tampon limité àMaxAllocSize
, défini comme suit:(voir http://doxygen.postgresql.org/memutils_8h.html )
Ainsi, une requête est limitée à 1 gigaoctet (2 ^ 30), moins un octet pour un octet nul final.
Si un client essayait d'envoyer une requête plus volumineuse, une erreur ressemblant à ceci se reproduirait:
où
N
est la taille de la requête.Sachez qu'une requête juste en dessous
1GB
peut nécessiter d'importantes quantités de mémoire à analyser, planifier ou exécuter, en plus de ce1GB
tampon.Si vous devez insérer une grande série de littéraux dans une requête, envisagez la possibilité de créer une table temporaire et ses
COPY
lignes et de faire en sorte que la requête principale fasse référence à cette table temporaire.la source