it-swarm.com.de

Gibt es eine maximale Längenbeschränkung für eine Postgres-Abfrage?

Die App, die wir erstellen, führt möglicherweise ziemlich große Einfügeabfragen aus. Gibt es eine Beschränkung, dass meine Postgres-Abfrage nur eine bestimmte Anzahl von Zeichen enthalten kann?

33

Für die aktuelle PostgreSQL-Version (bis zu 9.5) werden Abfragen von einem Backend in einem Stringinfo -Puffer empfangen, der auf MaxAllocSize beschränkt ist und wie folgt definiert ist:

#define MaxAllocSize   ((Size) 0x3fffffff) /* 1 gigabyte - 1 */

(siehe http://doxygen.postgresql.org/memutils_8h.html )

Eine Abfrage ist also auf 1 Gigabyte (2 ^ 30) begrenzt, minus 1 Byte für ein abschließendes Nullbyte.

Sollte ein Client versuchen, eine größere Anfrage zu senden, tritt ein Fehler auf, der so aussieht:

FEHLER: Nicht genügend Speicher
DETAIL: Zeichenfolgenpuffer mit 0 Bytes kann nicht um [~ # ~] n [~ # ~] weitere Bytes vergrößert werden.

dabei ist N die Größe der Abfrage.

Beachten Sie, dass für eine Abfrage direkt unter 1GB Zusätzlich zu diesem 1GB - Puffer möglicherweise große Speichermengen analysiert, geplant oder ausgeführt werden müssen.

Wenn Sie eine große Anzahl von Literalen in eine Abfrage verschieben müssen, ziehen Sie die Alternative in Betracht, eine temporäre Tabelle mit COPY Zeilen darin zu erstellen, und lassen Sie die Hauptabfrage auf diese temporäre Tabelle verweisen.

43
Daniel Vérité