Ir para o conteúdo
ou

Software livre Brasil

 Voltar a SAVEPOINT
Tela cheia

Desabilitando todos os gatilhos do PostgreSQL

20 de Abril de 2018, 9:38 , por Savepoint - 0sem comentários ainda | Ninguém está seguindo este artigo ainda.
Visualizado 2 vezes

Uma dica rápida vindo de uma pergunta no Telegram hoje de manhã: Como desativar todos os gatilhos de todas as tabelas de uma vez só?

A princípio pensei em consultar o INFORMATION SCHEMA para isso com algo como:

SELECT 'ALTER TABLE ' || event_object_schema || '.' || event_object_table || ' DISABLE TRIGGER ' || trigger_name || ';' 
FROM information_schema.triggers
GROUP BY trigger_name, event_object_schema, event_object_table;

Funciona, mas você não consegue filtrar apenas os gatilhos que estão habilitados. Então achei melhor partir para o catálogo do postgres logo de uma vez:

 

SELECT 'ALTER TABLE ' || n.nspname || '.' || c.relname || ' DISABLE TRIGGER ' || t.tgname || ';' 
FROM
    pg_class c
    JOIN pg_namespace n ON n.oid = c.relnamespace
    JOIN pg_trigger t ON c.oid = t.tgrelid
WHERE 
    tgenabled = 'O' AND
    NOT tgisinternal;

Note o cuidado em filtrar aqui o tipo de gatilho. Depois de desabilitar tudo, você provavelmente vai querer habilitar tudo novamente:

SELECT 'ALTER TABLE ' || n.nspname || '.' ||c.relname || ' ENABLE TRIGGER ' || t.tgname || ';' 
FROM
    pg_class c
    JOIN pg_namespace n ON n.oid = c.relnamespace
    JOIN pg_trigger t ON c.oid = t.tgrelid
WHERE 
    tgenabled = 'D' AND
    NOT tgisinternal;

Espero ter ajudado!


Fonte: http://www.savepoint.blog.br/2018/04/20/desabilitando-todos-os-gatilhos-do-postgresql/

0sem comentários ainda

Enviar um comentário

Os campos são obrigatórios.

Se você é um usuário registrado, pode se identificar e ser reconhecido automaticamente.