Как посмотреть блокировки таблицы в PostgreSQL | PGLens.

Как посмотреть блокировки таблицы в PostgreSQL

Блокировки конкретной таблицы отбираются из pg_locks фильтром по идентификатору отношения. Приведение relation::regclass возвращает читаемое имя объекта, а соединение с pg_stat_activity добавляет к номеру процесса текст запроса и состояние сессии.

Как посмотреть

  1. Все блокировки указанной таблицы вместе с удерживающими их запросами:
  2. SELECT l.pid, l.mode, l.granted, a.state, a.query
    FROM pg_locks l
    JOIN pg_stat_activity a ON a.pid = l.pid
    WHERE l.relation = 'public.orders'::regclass;
  3. Столбец granted со значением false отмечает сессию, стоящую в очереди. Столбец mode показывает режим: AccessShareLock устанавливает обычное чтение, RowExclusiveLock – изменение строк, AccessExclusiveLock требуется командам вида ALTER TABLE и VACUUM FULL и несовместим с любыми другими режимами.
  4. Определить, кто именно удерживает объект, помогает функция pg_blocking_pids, принимающая номер ожидающего процесса:
  5. SELECT pg_blocking_pids(12345);

Бесплатный 7‑дневный аудит PostgreSQL с PGLens

PGLens остается у вас для полноценного тестирования еще до 90 дней БЕСПЛАТНО

    Напишите нам
    Удобнее с телефона?
    Сканируйте QR