Какова максимальная длина запроса для многозначного запроса SELECT в PostgreSQL?

Контекст заключается в том, что я пишу скрипт для отправки запроса загрузки/вставки на сервер 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).. ;
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
159
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Максимальная длина сообщения, которую поддерживает внешний/внутренний протокол PostgreSQL, составляет 1 ГБ. Как говорится в документации:

Первый байт сообщения идентифицирует тип сообщения, а следующие четыре байта определяют длину остальной части сообщения (это число длины включает себя, но не байт типа сообщения).

Но вы, вероятно, попадете в беду, прежде чем достигнете этого предела.

Если вы собираетесь загружать в PostgreSQL много данных, даже не думайте об использовании многострочного оператора INSERT. Путь к этому COPY. С помощью COPY ... FROM STDIN вы можете загружать произвольное количество данных в одном операторе, поскольку вы можете отправлять данные по сети кусками. С COPY ... FROM 'file' нет ограничений на размер файла.

Спасибо за ваш ответ. Итак, я понимаю из вашего ответа, что есть ограничение даже для запроса «КОПИРОВАНИЕ», если я не отправляю данные кусками? если я сохраню свои данные в файл, который, как мы предполагаем, имеет размер более 1 ГБ, и выполню запрос «КОПИРОВАНИЕ» для этого файла, возникнут ли у меня проблемы?

mabkoz 24.11.2022 16:42

Извините, я был неясен. Я говорил о COPY FROM STDIN, когда вы отправляете данные с клиента на сервер. Нет ограничений на количество данных, только ограничение на то, сколько вы можете отправить в одном сообщении. Для COPY FROM 'file' нет ограничений по размеру.

Laurenz Albe 24.11.2022 16:51

Спасибо за ваш ответ, я ценю это, это очень ясно!

mabkoz 24.11.2022 16:52

Другие вопросы по теме