SPI_cursor_open
SPI_cursor_open — открыть курсор для оператора, созданного функцией SPI_prepare
Синтаксис
Portal SPI_cursor_open(const char *name
, SPIPlanPtrplan
, Datum *values
, const char *nulls
, boolread_only
)
Описание
SPI_cursor_open
открывает курсор (внутри называемый порталом), через который будет выполняться оператор, подготовленный функцией SPI_prepare
. Параметры этой функции имеют тот же смысл, что и соответствующие параметры SPI_execute_plan
.
Применение курсора по сравнению с непосредственным выполнением оператора даёт двойную выгоду. Во-первых, строки результата можно получать в небольших количествах, без риска исчерпать всю память при выполнении запросов, возвращающих много строк. Во-вторых, портал может существовать и после завершения текущей функции на C (на самом деле он может просуществовать до конца текущей транзакции). Возвратив имя портала в код, вызывающий функцию на C, можно организовать выдачу результата в виде набора строк.
Переданные значения параметров копируются в портал курсора, так что их можно освободить и во время существования курсора.
Аргументы
const char *
name
имя портала, либо
NULL
, чтобы имя выбрала системаSPIPlanPtr
plan
подготовленный оператор (возвращаемый функцией
SPI_prepare
)Datum *
values
Массив фактических значений параметров. Его размер должен равняться числу аргументов оператора.
const char *
nulls
Массив, описывающий, в каких параметрах передаётся NULL. Должен иметь размер, равный числу аргументов оператора.
Если в
nulls
передаётсяNULL
,SPI_cursor_open
считает, что ни один из параметров не равен NULL. В противном случае элемент массиваnulls
должен содержать' '
, если значение соответствующего параметра не NULL, либо'n'
, если это значение — NULL. (В последнем случае значение, переданное в соответствующем элементеvalues
, не учитывается.) Заметьте, чтоnulls
— это не текстовая строка, а просто массив: ноль ('\0'
) в конце не нужен.bool
read_only
true
для режима выполнения «только чтение»
Возвращаемое значение
Указатель на портал, содержащий курсор. Заметьте, что соглашение о возврате ошибок отсутствует; все ошибки выдаются через elog
.
DISCARD
DISCARD — discard session state
Synopsis
DISCARD { ALL | PLANS | SEQUENCES | TEMPORARY | TEMP }
Description
DISCARD
releases internal resources associated with a database session. This command is useful for partially or fully resetting the session's state. There are several subcommands to release different types of resources; the DISCARD ALL
variant subsumes all the others, and also resets additional state.
Parameters
PLANS
Releases all cached query plans, forcing re-planning to occur the next time the associated prepared statement is used.
SEQUENCES
Discards all cached sequence-related state, including
currval()
/lastval()
information and any preallocated sequence values that have not yet been returned bynextval()
. (See CREATE SEQUENCE for a description of preallocated sequence values.)TEMPORARY
orTEMP
Drops all temporary tables created in the current session.
ALL
Releases all temporary resources associated with the current session and resets the session to its initial state. Currently, this has the same effect as executing the following sequence of statements:
CLOSE ALL; SET SESSION AUTHORIZATION DEFAULT; RESET ALL; DEALLOCATE ALL; UNLISTEN *; SELECT pg_advisory_unlock_all(); DISCARD PLANS; DISCARD TEMP; DISCARD SEQUENCES;
Notes
DISCARD ALL
cannot be executed inside a transaction block.
Compatibility
DISCARD
is a PostgreSQL extension.