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?
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?
Antworten:
In der aktuellen PostgreSQL-Version (bis zu 9.5) werden Abfragen von einem Backend in einem Stringinfo
Puffer empfangen, der auf Folgendes beschränkt MaxAllocSize
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 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 N
ist die Größe der Abfrage.
Beachten Sie, dass für eine Abfrage direkt darunter 1GB
mö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 COPY
Zeilen einzutragen und die Hauptabfrage auf diese temporäre Tabelle zu verweisen.