Триггеры сброса для всех столов - PullRequest
1 голос
/ 29 мая 2019

У меня есть несколько триггеров, все они являются одним и тем же триггером, но в разных таблицах, например,

  tgname         |          trigger_table           
------------------------+----------------------------------
 updated_agg_trigger    | forecasts.forecast_1548180000
 updated_agg_trigger    | forecasts.forecast_1548187200
 updated_agg_trigger    | forecasts.forecast_1548162000
 updated_agg_trigger    | forecasts.forecast_1548190800
 updated_agg_trigger    | forecasts.forecast_1548183600
 updated_agg_trigger    | forecasts.forecast_1548172800
 updated_agg_trigger    | forecasts.forecast_1548111600
 updated_agg_trigger    | forecasts.forecast_1548136800
 updated_agg_trigger    | forecasts.forecast_1548129600

Как я могу удалить все updated_agg_trigger -триггеры во всех таблицах одной командой?

P.S. Я не хочу удалять ВСЕ триггеры, только updated_agg_trigger -триггеры.

1 Ответ

2 голосов
/ 29 мая 2019

Выполнить динамический цикл цикла information_schema.triggers.

DO $$
DECLARE
l_trig_name TEXT := 'updated_agg_trigger';
l_schema    TEXT := 'forecasts';
rec record;
BEGIN

for rec IN
(
  SELECT event_object_table as table_name
      ,trigger_schema as schema_name
      ,trigger_name
   FROM  information_schema.triggers
      WHERE  trigger_name   = l_trig_name
       AND trigger_schema   = l_schema
 ) 
   LOOP
        EXECUTE format ('DROP TRIGGER %I 
                ON %I.%I', rec.trigger_name,rec.schema_name,rec.table_name);
   END LOOP;

END $$;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...