pgrowlocks. Информация о блоки ровке строк для заданной таблицы
В исходном дистрибутиве установлено по умолчанию: нет.
Связанные компоненты: отсутствуют.
Схема размещения:
ext
.
Модуль предоставляет функцию pgrowlocks(text)
, показывающую информацию о блокировке строк для заданной таблицы.
pgrowlocks(text) returns SETOF RECORD
В качестве параметра text
передается имя таблицы.
Результат: набор записей, в котором строки соответствуют заблокированным в таблице строкам.
Столбцы результата pgrowlocks
:
Имя | Тип | Описание |
---|---|---|
locked_row | tid | Идентификатор кортежа (TID) блокированной строки |
locker | xid | – Идентификатор блокирующей транзакции; – идентификатор мультитранзакции, если это мультитранзакция |
multi | boolean | Признак мультитранзакции |
xids | xid[] | Идентификаторы блокирующих транзакций (больше одной для мультитранзакции) |
modes | text[] | Режим блокирования (больше одного для мультитранзакции), массив со значениями: – Key Share – Share – For No Key Update – No Key Update – For Update, Update |
pids | integer[] | Идентификаторы блокирующих обслуживающих процессов (больше одного для мультитранзакции) |
Функция pgrowlocks
запрашивает блокировку AccessShareLock
для целевой таблицы и считывает строку за строкой для сбора информац ии о блокировке строк. Для большой таблицы это может занять значительное время.
Замечание:
- Если таблица заблокирована в режиме
ACCESS EXCLUSIVE
, функцияpgrowlocks
будет блокироваться.- Функция
pgrowlocks
не гарантирует внутреннюю согласованность результатов. В ходе ее выполнения могут быть установлены новые блокировки строк либо освобождены старые.
Функция pgrowlocks
не показывает содержимое заблокированных строк. Если необходимо параллельно взглянуть на содержимое строк, можно сделать следующее, но такой запрос не будет эффективным:
SELECT * FROM accounts AS a, pgrowlocks('accounts') AS p
WHERE p.locked_row = a.ctid;
Доработка
Доработка не проводилась.