Esiste un limite di lunghezza massima per una query postgres?


33

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?


2
Direi solo che se ti stai avvicinando a qualsiasi tipo di limite di quella natura, dovresti riconsiderare il tuo progetto. Ho scoperto che, di solito, tutte le query che si avvicinano sono normalmente generate da una sorta di framework (che coinvolge concatenazione di stringhe estreme) e tendono a perdere il contatto con la realtà.
Vérace,

Risposte:


43

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.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.