Czy istnieje ograniczenie maksymalnej długości dla zapytania postgres?

33

Tworzona przez nas aplikacja może wykonywać dość duże zapytania dotyczące wstawiania. Czy istnieje ograniczenie, że moje zapytanie postgres może mieć tylko określoną liczbę znaków?

Kannan Ramamoorthy
źródło
2
Powiedziałbym tylko, że jeśli zbliżasz się do jakiegokolwiek ograniczenia tego rodzaju, musisz ponownie rozważyć swój projekt. Przekonałem się, że zwykle wszelkie zapytania, które się zbliżają, są zwykle generowane przez jakiś szkielet (obejmujący ekstremalne łączenie łańcuchów) i mają tendencję do utraty kontaktu z rzeczywistością.
Vérace

Odpowiedzi:

43

Dla aktualnej wersji PostgreSQL (do 9.5) zapytania są odbierane przez backend w Stringinfobuforze, który jest ograniczony do MaxAllocSize, zdefiniowany jako:

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

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

Zatem zapytanie jest ograniczone do 1 gigabajta (2 ^ 30), minus 1 bajt dla kończącego bajtu zerowego.

Jeśli klient spróbuje wysłać większe zapytanie, wróci taki błąd:

BŁĄD: brak pamięci
SZCZEGÓŁY: Nie można powiększyć buforu ciągów zawierającego 0 bajtów o N więcej bajtów.

gdzie Njest rozmiar zapytania.

Należy pamiętać, że zapytanie znajdujące się poniżej 1GBmoże wymagać przeanalizowania, zaplanowania lub wykonania dużej ilości pamięci oprócz tego 1GBbufora.

Jeśli chcesz wepchnąć dużą liczbę literałów do zapytania, zastanów się nad alternatywą tworzenia tabeli tymczasowej, COPYwierszy do niej i poproś, aby zapytanie główne odnosiło się do tej tabeli tymczasowej.

Daniel Vérité
źródło