SPI_modifytuple
SPI_modifytuple — создать строку, заменяя отдельные поля в данной
Синтаксис
HeapTuple SPI_modifytuple(Relationrel
, HeapTuplerow
, intncols
, int *colnum
, Datum *values
, const char *nulls
)
Описание
SPI_modifytuple
создаёт новую строку, подставляя новые значения для указанных столбцов и копируя исходное содержимое остальных столбцов. Исходная строка не изменяется. Новая строка возвращается в верхнем контексте исполнителя.
Эту функцию можно использовать только когда установлено подключение к SPI. В противном случае она возвращает NULL и устанавливает в SPI_result
значение SPI_ERROR_UNCONNECTED
.
Аргументы
Relation
rel
Используется только в качестве дескриптора строки. (Передача отношения вместо собственно дескриптора строки — нехорошая особенность.)
HeapTuple
row
строка, подлежащая изменению
int
ncols
число изменяемых столбцов
int *
colnum
массив длины
ncols
, содержащий номера изменяемых столбцов (начиная с 1)Datum *
values
массив длины
ncols
, содержащий новые значения указанных столбцовconst char *
nulls
массив длины
ncols
, описывающий, в каких столбцах передаётся NULLЕсли в
nulls
передаётсяNULL
,SPI_modifytuple
считает, что ни один из параметров не равен NULL. В противном случае элемент массиваnulls
должен содержать' '
, если значение соответствующего параметра не NULL, либо'n'
, если это значение — NULL. (В последнем случае значение, переданное в соответствующем элементеvalues
, не учитывается.) Заметьте, чтоnulls
— это не текстовая строка, а просто массив: ноль'\0'
в конце не нужен.
Возвращаемое значение
новая строка с изменениями, размещённая в верхнем контексте исполнителя, или NULL
при ошибке (SPI_result
содержит код ошибки)
В случае ошибки в SPI_result
устанавливается:
SPI_ERROR_ARGUMENT
если
rel
—NULL
, либоrow
—NULL
, либоncols
меньше или равно 0, либоcolnum
—NULL
, либоvalues
—NULL
SPI_ERROR_NOATTRIBUTE
если
colnum
содержит недопустимый номер столбца (меньше или равен 0, либо больше числа столбцов в строкеrow
)SPI_ERROR_UNCONNECTED
если SPI неактивен
27.3. Viewing Locks #
Another useful tool for monitoring database activity is the pg_locks
system table. It allows the database administrator to view information about the outstanding locks in the lock manager. For example, this capability can be used to:
View all the locks currently outstanding, all the locks on relations in a particular database, all the locks on a particular relation, or all the locks held by a particular PostgreSQL session.
Determine the relation in the current database with the most ungranted locks (which might be a source of contention among database clients).
Determine the effect of lock contention on overall database performance, as well as the extent to which contention varies with overall database traffic.
Details of the pg_locks
view appear in Section 52.12. For more information on locking and managing concurrency with PostgreSQL, refer to Chapter 13.