SET session_replication_role = replica;
To nie działa z PostgreSQL 9.4 na moim komputerze z systemem Linux, jeśli zmienię stolik poprzez edytor tabel w pgAdmin i działa w przypadku zmiany przez zwykłą tabelę zapytania. Ręczne zmiany w tabeli pg_trigger również nie działają bez restartu serwera, ale działa dynamiczne zapytanie, takie jak na postgresql.nabble.com ENABLE/DISABLE ALL TRIGGERS IN DATABASE. Może to być przydatne, gdy potrzebujesz strojenia.
Na przykład, jeśli masz tabel w danej przestrzeni nazw może to być:
create or replace function disable_triggers(a boolean, nsp character varying) returns void as
$$
declare
act character varying;
r record;
begin
if(a is true) then
act = 'disable';
else
act = 'enable';
end if;
for r in select c.relname from pg_namespace n
join pg_class c on c.relnamespace = n.oid and c.relhastriggers = true
where n.nspname = nsp
loop
execute format('alter table %I %s trigger all', r.relname, act);
end loop;
end;
$$
language plpgsql;
Jeśli chcesz wyłączyć wszystkie wyzwala z pewną funkcją wyzwalania może być: dokumentacja
create or replace function disable_trigger_func(a boolean, f character varying) returns void as
$$
declare
act character varying;
r record;
begin
if(a is true) then
act = 'disable';
else
act = 'enable';
end if;
for r in select c.relname from pg_proc p
join pg_trigger t on t.tgfoid = p.oid
join pg_class c on c.oid = t.tgrelid
where p.proname = f
loop
execute format('alter table %I %s trigger all', r.relname, act);
end loop;
end;
$$
language plpgsql;
PostgreSQL dla system catalogs
Istnieją inne kontr ol opcje procesu wyzwalania wyzwalacza:
ALTER TABELA ... WŁĄCZ REPLICA TRIGGER ... - trigger uruchamia się tylko w trybie repliki.
ALTER TABLE ... włączyć ZAWSZE spust ... - wyzwalacz będzie ogień zawsze (oczywiście)
Dokładnie to, co szukałem za, dzięki! –
A następnie, w jaki sposób "ponownie obliczyć wszystkie modyfikacje wyzwalacza"? –
Ostrożnie z jednoczesnym ładowaniem: 'ALTER TABLE ... DISABLE TRIGGER USER' wymaga wyłącznego blokowania na stole. –