Desabilitando todos os gatilhos do PostgreSQL

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:

SQL
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:

SQL
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:

SQL
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!

Compartilhe

Você pode gostar

pg_hba.conf

Introdução O arquivo pg_hba.conf (PostgreSQL Host-Based Authentication) é uma peça fundamental na configuração de segurança de qualquer instância PostgreSQL. Ele define as regras de autenticação

Tuning de SO (no Linux)

Introdução Tuning refere-se ao processo de ajustar e otimizar o desempenho de um sistema, software ou aplicação. A otimização do sistema operacional é uma etapa

Tipos de cargas dos bancos de dados

Introdução Cargas de dados referem-se aos diferentes tipos de operações e transações que um banco de dados deve processar. Essas cargas variam conforme o tipo

plugins premium WordPress