×
Мы обрабатываем cookies, чтобы сделать наш сайт удобнее и персонализированнее для вас. Подробнее: политика использования «cookies» и «политики конфиденциальности».

Для самостоятельной настройки ознакомьтесь с инструкцией

Дополнительные настройки cookies в браузерах

Файлы cookie автоматически загружаются в ваш браузер при посещении веб-сайта. У вас есть возможность управлять этими файлами. Если Вы не согласны с использованием файлов cookies, запретите их сохранение на своём устройстве, удалите уже имеющиеся файлы cookies через настройки браузера или прекратите использование сайта.

При отключении обработки cookie наш сайт продолжит функционировать, однако будут использоваться исключительно необходимые технические файлы, без которых работа ресурса невозможна.

Инструкция по отключению cookies
Принять
Настроить
Отклонить

ДОКУМЕНТАЦИЯ

Выберите версию, форк и язык для СУБД Digital Q.DataBase, чтобы прочитать или скачать всю документацию.
Техподдержка
Документация
Диасофт
Авторские права © 2016–2025 ООО "Диасофт Экосистема"
Скачать всю документацию:

4.1.6. Получение результатов запроса фрагментами

Обычно libpq собирает результат выполнения команды SQL целиком и возвращает его приложению в виде одного объекта PGresult. Это может быть неприемлемо для команд, возвращающих большое количество строк. В таких случаях приложения могут использовать PQsendQuery и PQgetResult в построчный режим или фрагментированном режиме. В этих режимах строки результата возвращаются приложению по мере их получения от сервера: по одной в построчном режиме или группами во фрагментированном режиме.

Чтобы перейти в один из этих режимов, вызовите функцию PQsetSingleRowMode или функцию PQsetChunkedRowsMode сразу после успешного вызова функции PQsendQuery (или родственной функции). Выбор режима действует только для текущего выполняемого запроса. Затем повторно вызывайте функцию PQgetResult до тех пор, пока она не вернет значение NULL, как описано в Раздел 4.1.4. Если в результате выполнения запроса возвращаются строки, они представляются в виде одного или нескольких PGresult объектов. Эти объекты идентичны обычным результатам запроса, за исключением кода состояния PGRES_SINGLE_TUPLE для однострочного режима или PGRES_TUPLES_CHUNK для режима передачи блоками вместо PGRES_TUPLES_OK. В каждом объекте PGRES_SINGLE_TUPLE содержится ровно одна строка результата, тогда как объект PGRES_TUPLES_CHUNK содержит как минимум одну строку, но не более заданного максимального количества строк в блоке. После последней строки (или сразу, если запрос не вернул ни одной строки) возвращается объект с нулевым количеством строк и статусом PGRES_TUPLES_OK это означает; что передача строк завершена. (При этом следует учитывать, что необходимо продолжать вызов функции PQgetResult до тех пор, пока она не вернет значение NULL.) Все данные PGresult объекты будут содержать те же данные описания строк (имена столбцов, типы и т. д.), что и обычный PGresult для данного запроса. Каждый такой объект должен быть освобожден функцией PQclear как обычно.

При использовании конвейерного режима перед получением результатов каждого запроса в конвейере с помощью PQgetResult. См. Раздел 4.1.5 для получения дополнительной информации.

PQsetSingleRowMode #

Выбор однострочного режима для выполняемого в данный момент запроса.

int PQsetSingleRowMode(PGconn *conn);

Данную функцию можно вызывать только непосредственно после вызова функции PQsendQuery или одной из родственных ей функций, перед любыми другими операциями с соединением, такими как PQconsumeInput или PQgetResult. При вызове в надлежащий момент функция активирует однострочный режим для текущего запроса и возвращает 1. В противном случае состояние режима не меняется, а функция возвращает 0. В любом случае после завершения текущего запроса восстанавливается обычный режим.

PQsetChunkedRowsMode #

Выбор режима порционной выборки строк для текущего выполняемого запроса.

int PQsetChunkedRowsMode(PGconn *conn, int chunkSize);

Данная функция аналогична функции PQsetSingleRowMode, за исключением того, что она определяет получение до chunkSize строк в одной порции PGresult, а не обязательно только одной строки. Данную функцию можно вызывать только непосредственно после вызова функции PQsendQuery или одной из родственных ей функций, перед любыми другими операциями с соединением, такими как PQconsumeInput или PQgetResult. При вызове в надлежащий момент функция активирует режим порционной выборки для текущего запроса и возвращает 1. В противном случае состояние режима не меняется, а функция возвращает 0. В любом случае после завершения текущего запроса восстанавливается обычный режим.

Внимание

В процессе обработки запроса сервер может вернуть часть строк, а затем столкнуться с ошибкой, что приведет к прерыванию выполнения запроса. Как правило, библиотека libpq отбрасывает такие строки и сообщает только об ошибке. Однако в однострочном или порционном режиме часть строк уже может быть передана приложению. Следовательно, приложение получит несколько PGRES_SINGLE_TUPLE или PGRES_TUPLES_CHUNK PGresult объектов, за которыми последует PGRES_FATAL_ERROR объекта. Для обеспечения корректного транзакционного поведения приложение должно быть спроектировано таким образом, чтобы отбрасывать результаты обработки или отменять любые действия, выполненные с ранее полученными строками, если выполнение запроса в конечном итоге завершится сбоем.

Наверх
свяжитесь
с нами
контакты
Для прямой связи с нами вы можете использовать контакты ниже, либо оставить заявку через форму обратной связи, и мы обязательно свяжемся с вами

*поля обязательные к заполнению