Глава 44. Интерфейс программирования сервера#
Глава 44. Интерфейс программирования сервера
Оглавление
- 44.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
- 44.2. Функции поддержки интерфейса
- SPI_fname — определить имя столбца для указанного номера столбца
- SPI_fnumber — определить номер столбца для указанного имени столбца
- SPI_getvalue — вернуть строковое значение указанного столбца
- SPI_getbinval — возвращает двоичное значение указанного столбца
- SPI_gettype — возвращает имя типа данных указанного столбца
- SPI_gettypeid — возвращает тип данных OID указанного столбца
- SPI_getrelname — вернуть имя указанного отношения
- SPI_getnspname — вернуть пространство имен указанного отношения
- SPI_result_code_string — вернуть код ошибки в виде строки
- 44.3. Управление памятью
- SPI_palloc — выделить память в контексте верхнего исполнителя
- SPI_repalloc — перераспределить память в контексте верхнего исполнителя
- SPI_pfree — освобождение памяти в верхнем контексте исполнителя
- SPI_copytuple — создает копию строки в контексте верхнего исполнителя
- SPI_returntuple — подготовка к возврату кортежа в качестве значения типа Datum
- SPI_modifytuple — создание строки путем замены выбранных полей заданной строки
- SPI_freetuple — освобождает строку, выделенную в контексте верхнего исполнителя
- SPI_freetuptable — освобождает набор строк, созданный функцией
SPI_execute
или аналогичной функцией - SPI_freeplan — освобождает ранее сохраненный подготовленный оператор
- 44.4. Управление транзакциями
- SPI_commit — зафиксировать текущую транзакцию
- SPI_rollback — прерывает текущую транзакцию
- SPI_start_transaction — устаревшая функция
- 44.5. Видимость изменений данных
- 44.6. Примеры
Серверный программный интерфейс (SPI) предоставляет возможность разработчикам пользовательских функций на языке C выполнять команды SQL внутри своих функций или процедур. SPI - это набор функций интерфейса, упрощающих доступ к парсеру, планировщику и исполнителю. SPI также выполняет некоторую работу по управлению памятью.
Примечание
Доступные процедурные языки предоставляют различные средства для выполнения SQL-команд из функций. Большинство этих возможностей основаны на SPI, поэтому эта документация может быть полезна и пользователям этих языков.
Обратите внимание, что если команда, вызванная через SPI, завершается неудачей, то управление не будет возвращено в вашу функцию на языке C. Вместо этого транзакция или подтранзакция, в которой выполняется ваша функция на языке C, будет отменена. (Это может показаться неожиданным, учитывая, что функции SPI в основном имеют задокументированные соглашения о возврате ошибок. Однако эти соглашения применяются только к ошибкам, обнаруженным внутри самих функций SPI). Возможно восстановить управление после ошибки, установив собственную подтранзакцию, охватывающую вызовы SPI, которые могут завершиться неудачей.
Все функции SPI возвращают неотрицательный результат при успешном выполнении (либо через возвращаемое целочисленное значение, либо в глобальной переменной SPI_result
, как описано ниже). При ошибке будет возвращен отрицательный результат или NULL
.
Исходные файлы кода, использующие SPI, должны включать заголовочный файл executor/spi.h
.