Bir postgres sorgusu için maksimum uzunluk kısıtı var mı?


33

Biz inşa app oldukça büyük bir ekleme sorguları yürütebilir. Postgres sorgumda yalnızca belirli sayıda karakter bulunabileceği sınırı var mı?


2
Sadece, bu doğanın herhangi bir sınırına bile yaklaşırsanız, tasarımınızı yeniden gözden geçirmeniz gerektiğini söyleyebilirim. Genellikle yaklaşmakta olan tüm sorguların normal olarak bir tür çerçeve tarafından üretildiğini (aşırı dizge birleştirme ile birlikte) ve gerçeklikle teması kaybetme eğiliminde olduklarını buldum.
Vérace

Yanıtlar:


43

Mevcut PostgreSQL sürümü için (9.5'e kadar), sorgular arka uç tarafından Stringinfosınırlandırılmış ve aralarında MaxAllocSizetanımlanmış olan bir arabellekte alınır :

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

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

Bu nedenle, bir sorgu 1 gigabayt (2 ^ 30) boyutunda, sonlandırıcı bir boş bayt için eksi 1 bayt ile sınırlıdır .

Bir müşteri daha büyük bir sorgu göndermeye çalışırsa, bunun gibi görünen bir hata geri gelebilir:

HATA: bellek
yetersiz DETAIL: 0 bayt içeren dize arabelleğini N bayt daha genişletemezsiniz .

burada Nterimi boyutudur.

Hemen altındaki bir sorgunun 1GB, bu 1GBtamponlamaya ek olarak ayrıştırılması, planlanması veya yürütülmesi için büyük miktarda hafıza gerektirebileceğini unutmayın .

Büyük bir dizi hazır bilgiyi bir sorgunun içine itmeniz gerekirse, geçici bir tablo oluşturmanın alternatifini düşünün, içine sıralayın COPYve ana sorgunun bu geçici tabloya başvurmasını sağlayın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.