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

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

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

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

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

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

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

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

4.1.12. Вспомогательные функции

Как обычно, существуют функции, которые не вошли в другие разделы.

PQfreemem #

Освобождает память, выделенную функцией libpq.

void PQfreemem(void *ptr);

Освобождает память, выделенную функцией libpq, в частности PQescapeByteaConn, PQescapeBytea, PQunescapeBytea, и PQnotifies. Крайне важно использовать именно эту функцию, а не функцию free(), в операционных системах Microsoft Windows. Это обусловлено тем, что выделение памяти в библиотеке DLL и её освобождение в приложении корректно работает только при совпадении флагов многопоточности, режима сборки (release/debug) и типа компоновки (статическая/динамическая) у DLL и приложения. На платформах, отличных от Microsoft Windows, данная функция идентична стандартной функции библиотеки free().

PQconninfoFree #

Освобождает структуры данных, выделенные функцией PQconndefaults или PQconninfoParse.

void PQconninfoFree(PQconninfoOption *connOptions);

Если аргумент является значение NULL указателем, никакие операции не выполняются.

Простого вызова PQfreemem для этой цели будет недостаточно, так как массив содержит ссылки на вспомогательные строки.

PQencryptPasswordConn #

Подготавливает зашифрованную форму Digital Q.DataBase пароля.

char *PQencryptPasswordConn(PGconn *conn, const char *passwd, const char *user, const char *algorithm);

Данная функция предназначена для использования в клиентских приложениях, в которых возникает необходимость отправки таких команд, как ALTER USER joe PASSWORD 'pwd'. В подобных командах не рекомендуется отправлять исходный пароль в открытом виде, так как он может быть зафиксирован в журналах команд, мониторах активности и других средствах наблюдения. Вместо этого перед отправкой следует преобразовать пароль в зашифрованную форму с помощью данной функции.

Параметры passwd и user аргументами являются пароль в открытом виде и SQL-имя соответствующего пользователя. algorithm задает алгоритм шифрования, применяемый для шифрования пароля. В настоящее время поддерживаются следующие алгоритмы: md5 и scram-sha-256 (on и off также принимаются в качестве псевдонимов для md5, для обеспечения совместимости с более ранними версиями сервера). Следует отметить, что поддержка scram-sha-256 была введена в Digital Q.DataBase версии 10 и не будет корректно работать с более старыми версиями сервера. Если параметр algorithm имеет значение NULL значение NULL, данная функция запросит у сервера текущее значение параметра password_encryption настройки. Эта операция может привести к блокировке и завершиться ошибкой, если текущая транзакция прервана или соединение занято выполнением другого запроса. Если необходимо использовать алгоритм сервера по умолчанию, но при этом избежать блокировки, следует самостоятельно запросить password_encryption перед вызовом функции PQencryptPasswordConnи передать это значение в качестве параметра algorithm.

Возвращаемым значением является строка, выделенная функцией malloc. Вызывающая сторона может исходить из того, что строка не содержит специальных символов, требующих экранирования. Используйте PQfreemem для освобождения памяти по завершении работы с результатом. В случае ошибки функция возвращает значение NULL, а соответствующее сообщение сохраняется в объекте conn.

PQchangePassword #

Изменяет Digital Q.DataBase пароля.

PGresult *PQchangePassword(PGconn *conn, const char *user, const char *passwd);

Данная функция использует функцию PQencryptPasswordConn для построения и выполнения команды ALTER USER ... PASSWORD '...', тем самым изменяя пароль пользователя. Она существует по той же причине, что и функция PQencryptPasswordConn, но более удобна, так как она самостоятельно формирует и выполняет команду. PQencryptPasswordConn передается значение значение NULL в качестве аргумента алгоритма, поэтому шифрование выполняется в соответствии с серверным password_encryption параметром.

Параметры user и passwd аргументами являются SQL-имя целевого пользователя и новый пароль в открытом виде.

Функция возвращает PGresult указатель, представляющий результат выполнения команды ALTER USER команды или значение NULL, если выполнение процедуры завершилось сбоем до отправки какой-либо команды. PQresultStatus функцию следует вызвать для проверки возвращаемого значения на наличие любых ошибок (включая значение нулевого указателя, для которого она вернет PGRES_FATAL_ERROR). Для PQerrorMessage получения более подробной информации о таких ошибках используйте функцию.

PQencryptPassword #

Подготавливает форму пароля, зашифрованную по алгоритму md5, для Digital Q.DataBase пароля.

char *PQencryptPassword(const char *passwd, const char *user);

PQencryptPassword является более старой, устаревшей версией функции PQencryptPasswordConn. Различие заключается в том, что PQencryptPassword не требует объект conn, а md5 всегда используется в качестве алгоритма шифрования.

PQmakeEmptyPGresult #

Создает пустой PGresult объект с заданным статусом.

PGresult *PQmakeEmptyPGresult(PGconn *conn, ExecStatusType status);

Это libpqвнутренняя функция для выделения памяти и инициализации пустого типа PGresult PGresult объекта. Данная функция возвращает значение NULL в случае ошибки выделения памяти. Функция экспортируется, так как в некоторых приложениях оказывается полезным самостоятельно генерировать объекты результатов (особенно объекты со статусом ошибки). Если объект conn не является значением NULL и статус указывает на ошибку, то текущее сообщение об ошибке указанного соединения копируется в PGresult. Кроме того, если параметр объект conn не является значением NULL, все процедуры обработки событий, зарегистрированные для данного соединения, копируются в PGresult. (Для них не выполняются PGEVT_RESULTCREATE вызовы, но см. PQfireResultCreateEvents.) Обратите внимание, что в конечном итоге для данного объекта должна быть вызвана функция PQclear в конечном итоге должна быть вызвана для данного объекта, как и в случае с PGresult возвращаемому самой функцией libpq itself.

PQfireResultCreateEvents #

Инициирует событие PGEVT_RESULTCREATE (см. раздел Раздел 4.1.14) для каждой процедуры обработки событий, зарегистрированной в объекте conn PGresult объекта. В случае успешного выполнения возвращается ненулевое значение, а в случае сбоя любой процедуры события — ноль.

int PQfireResultCreateEvents(PGconn *conn, PGresult *res);

Параметры объект conn аргумент передаётся процедурам событий, но не используется напрямую. Он может быть значение NULL если процедуры событий не будут его использовать.

Процедуры событий, которые уже получили PGEVT_RESULTCREATE или PGEVT_RESULTCOPY событие для данного объекта, повторно не инициируются.

Основная причина того, что данная функция отделена от функции PQmakeEmptyPGresult заключается в том, что зачастую целесообразно создать PGresult и заполнить его данными перед вызовом процедур событий.

PQcopyResult #

Создаёт копию PGresult объекта. Данная копия никак не связана с исходным результатом, и функция PQclear должна быть вызвана, когда копия больше не требуется. В случае сбоя функции значение NULL возвращается значение NULL.

PGresult *PQcopyResult(const PGresult *src, int flags);

Данная функция не предназначена для создания точной копии. Возвращаемый результат всегда переводится в PGRES_TUPLES_OK статус и не содержит копий сообщений об ошибках из исходного объекта. (При этом копируется строка состояния команды.) Параметр flags определяет, какие еще данные подлежат копированию. Он представляет собой побитовое ИЛИ нескольких флагов. PG_COPYRES_ATTRS задает копирование атрибутов (определений столбцов) исходного результата. PG_COPYRES_TUPLES задает копирование кортежей исходного результата. (Это также подразумевает копирование атрибутов.) PG_COPYRES_NOTICEHOOKS задает копирование обработчиков уведомлений (notify hooks) исходного результата. PG_COPYRES_EVENTS задает копирование событий исходного результата. (При этом связанные с источником данные экземпляра не копируются.) Процедуры обработки событий получают PGEVT_RESULTCOPY события.

PQsetResultAttrs #

Устанавливает атрибуты типа PGresult объект.

int PQsetResultAttrs(PGresult *res, int numAttributes, PGresAttDesc *attDescs);

Предоставленные параметры attDescs копируются в результат. Если attDescs указателем является значение NULL или numAttributes меньше единицы, запрос игнорируется, а функция завершается успешно. Если res уже содержит атрибуты, функция завершится с ошибкой. Если функция завершается с ошибкой, возвращаемое значение равно нулю. Если функция завершается успешно, возвращаемое значение является ненулевым.

PQsetvalue #

Устанавливает значение поля кортежа для PGresult объект.

int PQsetvalue(PGresult *res, int tup_num, int field_num, char *value, int len);

Функция автоматически увеличивает внутренний массив кортежей результата по мере необходимости. Однако параметр tup_num должен быть меньше или равен PQntuples, что означает, что данная функция может увеличивать массив кортежей только на один кортеж за один вызов. Но любое поле любого существующего кортежа может быть изменено в произвольном порядке. Если значение в field_num уже существует, оно будет перезаписано. Если len равно -1 или значение имеет значение NULL значение NULL, значение поля будет установлено в значение SQL null. значение копируется во внутреннюю память результата, поэтому хранение исходных данных после завершения работы функции не требуется. Если функция завершается с ошибкой, возвращаемое значение равно нулю. Если функция завершается успешно, возвращается ненулевое значение.

PQresultAlloc #

Выделение вспомогательной памяти для типа PGresult объект.

void *PQresultAlloc(PGresult *res, size_t nBytes);

Вся память, выделенная с помощью данной функции, будет освобождена, когда res очищается. Если функция завершается с ошибкой, возвращаемое значение равно значение NULL. Гарантируется, что результат будет выровнен надлежащим образом для любого типа данных, так же как и для malloc.

PQresultMemorySize #

Возвращает количество байт, выделенных для типа PGresult объект.

size_t PQresultMemorySize(const PGresult *res);

Это значение является суммой всех malloc запросов, связанных с объектом типа PGresult то есть всей памяти, которая будет освобождена функцией PQclear. Данная информация может быть полезна для управления потреблением памяти.

PQlibVersion #

Возвращает версию libpq , которая используется в данный момент.

int PQlibVersion(void);

Результат данной функции можно использовать для определения во время выполнения того, доступна ли в текущей загруженной версии libpq конкретная функциональность. Данную функцию можно использовать, например, для определения доступных параметров соединения в функция PQconnectdb.

Результат формируется путем умножения номера основной версии библиотеки на 10000 и прибавления номера минорной версии. Например, версия 10.1 будет возвращена как 100001, а версия 11.0 — как 110000.

До основной версии 10 Digital Q.DataBase использовались трехкомпонентные номера версий, в которых первые две части вместе представляли основную версию. Для этих версий PQlibVersion используется по две цифры для каждой части; например, версия 9.1.5 будет возвращена как 90105, а версия 9.2.0 — как 90200.

Таким образом, для определения функциональной совместимости приложениям следует делить результат функции PQlibVersion на 100, а не на 10000, чтобы определить логический номер мажорной версии. Во всех сериях выпусков только две последние цифры различаются в минорных выпусках (выпусках с исправлениями ошибок).

Примечание

Данная функция появилась в Digital Q.DataBase версии 9.1, поэтому её нельзя использовать для обнаружения необходимой функциональности в более ранних версиях, так как её вызов создаст зависимость на этапе компоновки от версии 9.1 или более поздней.

PQgetCurrentTimeUSec #

Возвращает текущее время, выраженное количеством микросекунд, прошедших с начала эпохи Unix (то есть, time_t умноженное на 1 миллион).

pg_usec_time_t PQgetCurrentTimeUSec(void);

Это в первую очередь полезно для вычисления значений тайм-аута, используемых с PQsocketPoll.

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

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