powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Автовакуум и DROP TRIGGER
4 сообщений из 4, страница 1 из 1
Автовакуум и DROP TRIGGER
    #39945468
Сисдба Мастеркеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет.

Есть таблица some_table, в ней порядка 1.7 млрд записей.
Она была создана переливанием данных из аналогичной таблицы - это было сделано с целью изменения структуры без остановки продакшна.

На таблице висит триггер some_trigger.

Сейчас потребовалось новое изменение структуры - удалить триггер.

Все бы ничего, но при попытке выполнить DROP TRIGGER some_trigger ON some_table результата не дождались.

Пошли смотреть блокировки
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
SELECT blocked_locks.pid     AS blocked_pid,
       blocked_activity.usename  AS blocked_user,
       blocking_locks.pid     AS blocking_pid,
       blocking_activity.usename AS blocking_user,
       blocked_activity.query    AS blocked_statement,
       blocking_activity.query   AS current_statement_in_blocking_process
FROM  pg_catalog.pg_locks         blocked_locks
          JOIN pg_catalog.pg_stat_activity blocked_activity  ON blocked_activity.pid = blocked_locks.pid
          JOIN pg_catalog.pg_locks         blocking_locks
               ON blocking_locks.locktype = blocked_locks.locktype
                   AND blocking_locks.DATABASE IS NOT DISTINCT FROM blocked_locks.DATABASE
                   AND blocking_locks.relation IS NOT DISTINCT FROM blocked_locks.relation
                   AND blocking_locks.page IS NOT DISTINCT FROM blocked_locks.page
                   AND blocking_locks.tuple IS NOT DISTINCT FROM blocked_locks.tuple
                   AND blocking_locks.virtualxid IS NOT DISTINCT FROM blocked_locks.virtualxid
                   AND blocking_locks.transactionid IS NOT DISTINCT FROM blocked_locks.transactionid
                   AND blocking_locks.classid IS NOT DISTINCT FROM blocked_locks.classid
                   AND blocking_locks.objid IS NOT DISTINCT FROM blocked_locks.objid
                   AND blocking_locks.objsubid IS NOT DISTINCT FROM blocked_locks.objsubid
                   AND blocking_locks.pid != blocked_locks.pid

          JOIN pg_catalog.pg_stat_activity blocking_activity ON blocking_activity.pid = blocking_locks.pid
WHERE NOT blocked_locks.GRANTED AND blocked_activity.query LIKE 'DROP%';



Увидели там записи (blocking_activity.query)
Код: plaintext
autovacuum: VACUUM public.some_table (to prevent wraparound)

Подумали: надо грохнуть автовакуум и дроп завершится, попробовали. Ан нет.
Код: plaintext
ERROR:  must be a member of the role whose query is being canceled or member of pg_signal_backend

Это всё на проде, у себя на машине подобное воспроизвести не могу. У меня такой же автовакуум (to prevent wraparound) не блокирует дроп триггера.

Насколько я понимаю, дроп триггера запрашивает блокировку AccessExclusiveLock, которая конфликтует со всеми остальными режимами.

Собственно, вопросов два:

1. Что делать с продом ? База у хостера, суперпользователя нет, увы.
2. Почему не блокируется дроп у меня на машине ?

postgres 11.2
на моей машине в докере - postgres:11.2-alpine
...
Рейтинг: 0 / 0
Автовакуум и DROP TRIGGER
    #39945501
Сисдба Мастеркеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поправочка:

postgres 11.5
на моей машине в докере - postgres:11.5-alpine
...
Рейтинг: 0 / 0
Автовакуум и DROP TRIGGER
    #39945897
Сисдба Мастеркеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ура.

Сделали
Код: sql
1.
GRANT pg_signal_backend TO our_database_user;

- прошло.
Судя по всему, хостер настроил, что мы можем грантовать себе роли.
Запустили скрипт, он подвис на дропе, как и ожидалось.
После этого
Код: sql
1.
SELECT pg_cancel_backend(pid_autovacuum);

- прошло успешно.
Скрипт отвис и прошел успешно.

Всем спасибо за внимание :)
...
Рейтинг: 0 / 0
Автовакуум и DROP TRIGGER
    #39945935
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сисдба Мастеркеевич,

Тот процесс autovacuum, который вам теперь разрешили отстреливать, делал важную работу. Он, конечно, заново запустится, но хорошо бы ему до конца доработать.
В общем, не увлекайтесь вновь появившимися возможностями.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Автовакуум и DROP TRIGGER
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]