L'app che stiamo costruendo potrebbe eseguire query di inserimento piuttosto grandi. C'è un limite al fatto che la mia query postgres può contenere solo un certo numero di caratteri?
L'app che stiamo costruendo potrebbe eseguire query di inserimento piuttosto grandi. C'è un limite al fatto che la mia query postgres può contenere solo un certo numero di caratteri?
Risposte:
Per l'attuale versione di PostgreSQL (fino alla 9.5), le query vengono ricevute da un back-end in un Stringinfo
buffer, che è limitato a MaxAllocSize
, definito come:
#define MaxAllocSize ((Size) 0x3fffffff) /* 1 gigabyte - 1 */
(vedi http://doxygen.postgresql.org/memutils_8h.html )
Quindi una query ha una dimensione massima di 1 gigabyte (2 ^ 30), meno 1 byte per un byte null terminante.
Se un client tenta di inviare una query più grande, un errore simile a questo dovrebbe tornare:
ERRORE: memoria
insufficiente DETTAGLIO: impossibile ingrandire il buffer delle stringhe contenente 0 byte per N più byte.
dove N
è la dimensione della query.
Tenere presente che una query appena sotto 1GB
potrebbe richiedere l'analisi, la pianificazione o l'esecuzione di grandi quantità di memoria oltre a quel 1GB
buffer.
Se è necessario inserire una grande serie di valori letterali in una query, considerare l'alternativa di creare una tabella temporanea, COPY
inserire le righe in essa e fare in modo che la query principale faccia riferimento a quella tabella temporanea.