SPI_freetuptable
SPI_freetuptable — освободить набор строк, созданный SPI_execute
или подобной функцией
Синтаксис
void SPI_freetuptable(SPITupleTable * tuptable
)
Описание
SPI_freetuptable
освобождает набор строк, созданных предыдущей функцией SPI выполнения команд, например SPI_execute
. Таким образом, при вызове этой функции в качестве аргумента часто передаётся глобальная переменная SPI_tuptable
.
Эта функция полезна, когда функция на C, использующая SPI, должна выполнить несколько команд, но не хочет сохранять результаты предыдущих команд до завершения. Заметьте, что любые не освобождённые таким образом наборы строк будут всё равно освобождены при выполнении SPI_finish
. Кроме того, если была запущена подтранзакция, а затем она прервалась в ходе выполнения использующей SPI функции, все наборы строк, созданные в рамках подтранзакции, будут автоматически освобождены.
Начиная с PostgreSQL версии 9.3, SPI_freetuptable
содержит защитную логику, отфильтровывающую повторные запросы на удаление одного и того же набора строк. В предыдущих версиях повторное удаление могло приводить к сбоям.
Аргументы
SPITupleTable *
tuptable
указатель на набор строк, который нужно освободить (если NULL, ничего не происходит)
SPI_freetuptable
SPI_freetuptable — free a row set created by SPI_execute
or a similar function
Synopsis
void SPI_freetuptable(SPITupleTable * tuptable
)
Description
SPI_freetuptable
frees a row set created by a prior SPI command execution function, such as SPI_execute
. Therefore, this function is often called with the global variable SPI_tuptable
as argument.
This function is useful if an SPI-using C function needs to execute multiple commands and does not want to keep the results of earlier commands around until it ends. Note that any unfreed row sets will be freed anyway at SPI_finish
. Also, if a subtransaction is started and then aborted within execution of an SPI-using C function, SPI automatically frees any row sets created while the subtransaction was running.
Beginning in PostgreSQL 9.3, SPI_freetuptable
contains guard logic to protect against duplicate deletion requests for the same row set. In previous releases, duplicate deletions would lead to crashes.
Arguments
SPITupleTable *
tuptable
pointer to row set to free, or NULL to do nothing