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