Postgres - удалить запись после триггера - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть таблица postgres с некоторыми триггерами, которые срабатывают, если записи обновляются или удаляются.Они в основном архивируют записи, поэтому они не удаляются полностью - они просто меняют определенные атрибуты, чтобы записи не отображались в соответствующих представлениях.

Иногда я хочу навсегда удалить запись вручную, но я не могу этого сделать, потому что триггер срабатывает и работает, если я выполню запрос DELETE.

Пример: DELETE FROM records WHERE operator = 20

Есть ли способ выполнить запрос DELETE и обойти триггер, который срабатывает при удалении?

1 Ответ

0 голосов
/ 21 февраля 2019

При такой настройке, я думаю, что типичный подход состоит в том, чтобы избежать предоставления каких-либо прямых привилегий для базовой таблицы и поместить триггеры INSERT / UPDATE / DELETE в представление (позволяя владельцу таблицыизмените его при необходимости).

Если вы владелец таблицы, вы можете использовать ALTER TABLE для временного DISABLE и повторного ENABLE запуска.Пока вы делаете все это в транзакции, вы будете защищены от одновременных DELETE с, хотя они будут блокироваться, пока ваша транзакция не будет зафиксирована.

Если у вас есть привилегии суперпользователя, вы также можете предотвратитьзапускает срабатывание путем установки session_replication_role на replica при условии, что рассматриваемый триггер не настроен на срабатывание реплицированных баз данных.

...