Чи існує обмеження на максимальну довжину для запиту постгресів?


33

Додаток, який ми будуємо, може виконувати досить великі запити вставки. Чи існує обмеження, що мій запит на постгреси може містити лише певну кількість символів?


2
Я б просто сказав, що якщо ви навіть наближаєтесь до будь-якої межі такого характеру, вам потрібно буде переглянути свій дизайн. Я виявив, що, як правило, будь-які запити, що наближаються, зазвичай генеруються якоюсь основою (за участю крайнього конденсації рядків), і вони, як правило, втрачають контакт з реальністю.
Верацій

Відповіді:


43

Для поточної версії PostgreSQL (до 9,5) запити надходять за допомогою бекенда в Stringinfoбуфері, який обмежений MaxAllocSize, визначеним як:

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

(див. http://doxygen.postgresql.org/memutils_8h.html )

Таким чином, запит обмежений розміром 1 гігабайт (2 ^ 30), мінус 1 байт для завершення нульового байта.

Якщо клієнт спробує надіслати більший запит, повернеться помилка:

ПОМИЛКА: немає пам'яті
ДЕТАЛІ: Неможливо збільшити буфер рядків, що містить 0 байт на ще N байт.

де Nрозмір запиту.

Майте на увазі, що запит трохи нижче 1GBможе потребувати розбору, планування або виконання великого обсягу пам'яті на додаток до цього 1GBбуфера.

Якщо вам потрібно підштовхнути велику серію літералів до запиту, розгляньте альтернативу створення тимчасової таблиці, COPYрядків у неї та головний запит посилається на цю тимчасову таблицю.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.