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

33

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 haben kann?

Kannan Ramamoorthy
quelle
2
Ich würde nur sagen, dass Sie Ihr Design überdenken müssen, wenn Sie sich überhaupt einer Grenze dieser Art nähern. Ich habe festgestellt, dass Abfragen, die sich normalerweise annähern, normalerweise durch eine Art Framework (mit extremer String-Verkettung) generiert werden und dazu neigen, den Kontakt zur Realität zu verlieren.
Vérace

Antworten:

43

In der aktuellen PostgreSQL-Version (bis zu 9.5) werden Abfragen von einem Backend in einem StringinfoPuffer empfangen, der auf Folgendes beschränkt MaxAllocSizeist:

#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 Abfrage zu senden, wird ein Fehler wie der folgende zurückgegeben:


FEHLER: Nicht genügend Speicher DETAIL: Der Zeichenfolgenpuffer mit 0 Byte kann nicht um weitere N Byte vergrößert werden .

Wo Nist die Größe der Abfrage.

Beachten Sie, dass für eine Abfrage direkt darunter 1GBmöglicherweise zusätzlich viel Speicher analysiert, geplant oder ausgeführt werden muss1GB Puffer .

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

Daniel Vérité
quelle