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 Stringinfobuffer, 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 1GBpotrebbe richiedere l'analisi, la pianificazione o l'esecuzione di grandi quantità di memoria oltre a quel 1GBbuffer.
Se è necessario inserire una grande serie di valori letterali in una query, considerare l'alternativa di creare una tabella temporanea, COPYinserire le righe in essa e fare in modo che la query principale faccia riferimento a quella tabella temporanea.