SET session_replication_role = replica;
Non funziona con PostgreSQL 9.4 sulla mia macchina Linux se cambio un tavolo tramite editor di tabella in pgAdmin e funziona se cambio tabella tramite interrogazione ordinaria. Anche le modifiche manuali nella tabella pg_trigger non funzionano senza il riavvio del server, ma la query dinamica come su postgresql.nabble.com ENABLE/DISABLE ALL TRIGGERS IN DATABASE funziona. Potrebbe essere utile quando hai bisogno di una messa a punto.
Per esempio, se si dispone di tavoli in un particolare spazio dei nomi potrebbe essere:
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;
Se si desidera disattivare tutti i trigger con una certa funzione di trigger potrebbe essere: documentazione
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 per system catalogs
Ci sono altri contr ol opzioni del processo di innesco del grilletto:
ALTER TABLE ... ENABLE REPLICA TRIGGER ... - il trigger si attiva solo in modalità replica.
ALTER TABLE ... SEMPRE ATTIVA TRIGGER ... - grilletto scatterà sempre (ovviamente)
fonte
2015-01-30 10:15:07
Esattamente quello che stavo cercando grazie, grazie! –
E come si "ricalcola tutte le modifiche trigger"? –
Attenzione al carico simultaneo: 'ALTER TABLE ... DISABLE TRIGGER USER' richiede un blocco esclusivo sul tavolo. –