Контекст заключается в том, что я пишу скрипт для отправки запроса загрузки/вставки на сервер postgres для вставки строк в существующую таблицу. Я читал много ресурсов по теме, о подходе к выбору между «КОПИРОВАНИЕ» и многозначным запросом SELECT. Я хочу знать, какова максимальная длина запроса, допустимая для многозначного запроса SELECT PostgreSQL? Я динамически создаю SQL-запрос, чтобы отправить его на сервер postgres, и я не могу заранее знать, сколько строк после «значений» у меня может быть.
Другой вопрос, если я сохраню свою таблицу в файле и использую «КОПИРОВАТЬ» для загрузки содержимого файла, есть ли какие-либо ограничения для файла, т.е. ограничение по количеству строк, байтов, ... ?
Я пробовал оба подхода, с многозначным запросом SELECT и запросом «COPY». Они оба работают для меня, но мне нужно больше знать об ограничениях каждого из них. Поискал, нашел, что для простого запроса ограничение 1гб. Применяется ли это ограничение к многозначному выбору?
Я не смог найти каких-либо ограничений для запроса «КОПИРОВАНИЕ», поэтому я тоже ищу эту информацию.
Заранее спасибо !
РЕДАКТИРОВАТЬ :
Что я имел в виду под запросом "многозначный выбор":
SELECT INTO "TABLE" VALUES (Column 1, Column 2), (Column 1, Column 2), (Column 1, Column 2).. ;
Максимальная длина сообщения, которую поддерживает внешний/внутренний протокол PostgreSQL, составляет 1 ГБ. Как говорится в документации:
Первый байт сообщения идентифицирует тип сообщения, а следующие четыре байта определяют длину остальной части сообщения (это число длины включает себя, но не байт типа сообщения).
Но вы, вероятно, попадете в беду, прежде чем достигнете этого предела.
Если вы собираетесь загружать в PostgreSQL много данных, даже не думайте об использовании многострочного оператора INSERT
. Путь к этому COPY
. С помощью COPY ... FROM STDIN
вы можете загружать произвольное количество данных в одном операторе, поскольку вы можете отправлять данные по сети кусками. С COPY ... FROM 'file'
нет ограничений на размер файла.
Извините, я был неясен. Я говорил о COPY FROM STDIN
, когда вы отправляете данные с клиента на сервер. Нет ограничений на количество данных, только ограничение на то, сколько вы можете отправить в одном сообщении. Для COPY FROM 'file'
нет ограничений по размеру.
Спасибо за ваш ответ, я ценю это, это очень ясно!
Спасибо за ваш ответ. Итак, я понимаю из вашего ответа, что есть ограничение даже для запроса «КОПИРОВАНИЕ», если я не отправляю данные кусками? если я сохраню свои данные в файл, который, как мы предполагаем, имеет размер более 1 ГБ, и выполню запрос «КОПИРОВАНИЕ» для этого файла, возникнут ли у меня проблемы?