Додаток, який ми будуємо, може виконувати досить великі запити вставки. Чи існує обмеження, що мій запит на постгреси може містити лише певну кількість символів?
Додаток, який ми будуємо, може виконувати досить великі запити вставки. Чи існує обмеження, що мій запит на постгреси може містити лише певну кількість символів?
Відповіді:
Для поточної версії 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рядків у неї та головний запит посилається на цю тимчасову таблицю.