Динамически назначать имя триггера postgresql

Привет, у меня есть функция Registra_cambios(); которые хотят назначить всем таблицам в моей базе данных, интересно, можете ли вы объединить имя триггера с записью (именем таблицы) моего курсора, чтобы не иметь одинаковое имя триггера во всех таблицах

создать пример триггера t_log_ "запись" ()

CREATE OR REPLACE FUNCTION ActiveTriggers() returns  void as $$
DECLARE

 r record;
c CURSOR FOR SELECT table_name as tab FROM information_schema.tables WHERE table_schema='public' AND table_type='BASE TABLE';


BEGIN

  FOR r IN c LOOP
        create trigger t_log_r before insert or update or delete
        on r.tab
        for each row
        execute procedure Registra_cambios();
  END LOOP;




END;
$$ LANGUAGE plpgsql;

person Dev. Joel    schedule 06.08.2016    source источник
comment
используйте execute для динамического sql   -  person Vao Tsun    schedule 06.08.2016
comment
На самом деле триггеры - это свойство таблиц, поэтому их имена должны быть уникальными только для одной и той же таблицы, а не для схемы/базы данных.   -  person Abelisto    schedule 06.08.2016
comment
@Abelisto, если это так, я хочу создать динамическое триггерное имя, t_log_ name + nametable   -  person Dev. Joel    schedule 06.08.2016


Ответы (1)


что-то вроде?..

do
$$
declare
  r record;
begin
  for r in (SELECT table_name as tab FROM information_schema.tables WHERE table_schema='public' AND table_type='BASE TABLE';) loop
    execute 'create trigger t_log_r_'||r.tab||' before insert or update or delete
    on '||r.tab||'
    for each row
    execute procedure Registra_cambios()';
  end loop;
end;
$$
;
person Vao Tsun    schedule 06.08.2016
comment
Я считаю, что точка с запятой ; была проблемой - я скопировала ваше утверждение - сначала следует отредактировать его - person Vao Tsun; 06.08.2016
comment
Кстати, я бы рекомендовал вам использовать limit 2 для начала. чтобы не создавать триггеры для большого количества столов, прежде чем вы действительно этого захотите - person Vao Tsun; 06.08.2016
comment
еще одна слепая копия-вставка - вы используете вкладку как псевдоним для table_name. изменил код... - person Vao Tsun; 06.08.2016