Глава 45. Интерфейс программирования сервера#

Глава 45. Интерфейс программирования сервера

Глава 45. Интерфейс программирования сервера

Оглавление

45.1. Функции интерфейса
SPI_connect — подключить функцию на языке C к менеджеру SPI
SPI_finish — отключить функцию C от менеджера SPI
SPI_execute — выполнить команду
SPI_exec — выполнить команду чтения/записи
SPI_execute_extended — выполнить команду с параметрами вне строки
SPI_execute_with_args — выполнить команду с параметрами вне строки
SPI_prepare — подготовить оператор без его выполнения
SPI_prepare_cursor — подготовить оператор без его выполнения
SPI_prepare_extended — подготовить оператор без его выполнения
SPI_prepare_params — подготовить оператор без его выполнения
SPI_getargcount — возвращает количество аргументов, необходимых для выполнения оператора, подготовленного с помощью функции SPI_prepare
SPI_getargtypeid — возвращает тип данных OID для аргумента оператора, подготовленного с помощью функции SPI_prepare
SPI_is_cursor_plan — возвращает true, если оператор, подготовленный с помощью функции SPI_prepare, может быть использован с функцией SPI_cursor_open
SPI_execute_plan — выполнить оператор, подготовленный с помощью SPI_prepare
SPI_execute_plan_extended — выполнить оператор, подготовленный с помощью SPI_prepare
SPI_execute_plan_with_paramlist — выполнить оператор, подготовленный с помощью SPI_prepare
SPI_execp — выполнить оператор в режиме чтения/записи
SPI_cursor_open — Настройка курсора с использованием оператора, созданного с помощью функции SPI_prepare
SPI_cursor_open_with_args — настройка курсора с использованием запроса и параметров
SPI_cursor_open_with_paramlist — настройка курсора с использованием параметров
SPI_cursor_parse_open — настройка курсора с использованием строки запроса и параметров
SPI_cursor_find — найти существующий курсор по имени
SPI_cursor_fetch — извлечь несколько строк из курсора
SPI_cursor_move — перемещение курсора
SPI_scroll_cursor_fetch — извлечь несколько строк из курсора
SPI_scroll_cursor_move — перемещение курсора
SPI_cursor_close — закрыть курсор
SPI_keepplan — сохранить подготовленное выражение
SPI_saveplan — сохранить подготовленное выражение
SPI_register_relation — сделать временное именованное отношение доступным по имени в запросах SPI
SPI_unregister_relation — удалить временное именованное отношение из реестра
SPI_register_trigger_data — сделать временные данные триггера доступными в запросах SPI
45.2. Функции поддержки интерфейса
SPI_fname — определить имя столбца для указанного номера столбца
SPI_fnumber — определить номер столбца для указанного имени столбца
SPI_getvalue — вернуть строковое значение указанного столбца
SPI_getbinval — возвращает двоичное значение указанного столбца
SPI_gettype — возвращает имя типа данных указанного столбца
SPI_gettypeid — возвращает тип данных OID указанного столбца
SPI_getrelname — вернуть имя указанного отношения
SPI_getnspname — вернуть пространство имен указанного отношения
SPI_result_code_string — вернуть код ошибки в виде строки
45.3. Управление памятью
SPI_palloc — выделить память в контексте верхнего исполнителя
SPI_repalloc — перераспределить память в контексте верхнего исполнителя
SPI_pfree — освобождение памяти в верхнем контексте исполнителя
SPI_copytuple — создает копию строки в контексте верхнего исполнителя
SPI_returntuple — подготовка к возврату кортежа в качестве значения типа Datum
SPI_modifytuple — создание строки путем замены выбранных полей заданной строки
SPI_freetuple — освобождает строку, выделенную в контексте верхнего исполнителя
SPI_freetuptable — освобождает набор строк, созданный функцией SPI_execute или аналогичной функцией
SPI_freeplan — освобождает ранее сохраненный подготовленный оператор
45.4. Управление транзакциями
SPI_commit — закоммитить текущую транзакцию
SPI_rollback — прерывает текущую транзакцию
SPI_start_transaction — устаревшая функция
45.5. Видимость изменений данных
45.6. Примеры

Серверный программный интерфейс (SPI) предоставляет возможность разработчикам пользовательских функций на языке C выполнять команды SQL внутри своих функций или процедур. SPI - это набор функций интерфейса, упрощающих доступ к парсеру, планировщику и исполнителю. SPI также выполняет некоторую работу по управлению памятью.

Примечание

Доступные процедурные языки предоставляют различные средства для выполнения SQL-команд из функций. Большинство этих возможностей основаны на SPI, поэтому эта документация может быть полезна и пользователям этих языков.

Обратите внимание, что если команда, вызванная через SPI, завершается неудачей, то управление не будет возвращено в вашу функцию на языке C. Вместо этого транзакция или подтранзакция, в которой выполняется ваша функция на языке C, будет отменена. (Это может показаться неожиданным, учитывая, что функции SPI в основном имеют задокументированные соглашения о возврате ошибок. Однако эти соглашения применяются только к ошибкам, обнаруженным внутри самих функций SPI). Возможно восстановить управление после ошибки, установив собственную подтранзакцию, охватывающую вызовы SPI, которые могут завершиться неудачей.

Все функции SPI возвращают неотрицательный результат при успешном выполнении (либо через возвращаемое целочисленное значение, либо в глобальной переменной SPI_result, как описано ниже). При ошибке будет возвращен отрицательный результат или NULL.

Исходные файлы кода, использующие SPI, должны включать заголовочный файл executor/spi.h.