Estou carregando dados em massa e posso recalcular todas as modificações de gatilho muito mais baratas após o fato do que em uma linha por linha.
Como posso desativar temporariamente todos os gatilhos no PostgreSQL?
postgresql
triggers
bulkinsert
David Schmitt
fonte
fonte
ENABLE REPLICA
ouENABLE ALWAYS
.10.4
e parece ignorar esta afirmação acima.O PostgreSQL conhece o
ALTER TABLE tblname DISABLE TRIGGER USER
comando, que parece fazer o que eu preciso. Veja ALTER TABLE .fonte
ALTER TABLE ... DISABLE TRIGGER USER
requer um bloqueio exclusivo na mesa.Para desativar o gatilho
Para ativar gatilho
fonte
ALTER TABLE table_name DISABLE TRIGGER all
Ele não funciona com o PostgreSQL 9.4 na minha máquina Linux se eu alterar uma tabela através do editor de tabelas no pgAdmin e funciona se eu alterar a tabela através de consultas comuns. Alterações manuais na tabela pg_trigger também não funcionam sem a reinicialização do servidor, mas consultas dinâmicas como postgresql.nabble.com FUNCIONAM / DESATIVAM TODOS OS TRIGGERS NO DATABASE . Pode ser útil quando você precisar de algum ajuste.
Por exemplo, se você possui tabelas em um espaço para nome específico, pode ser:
Se você deseja desativar todos os gatilhos com determinada função de gatilho, pode ser:
Documentação do PostgreSQL para catálogos de sistemas
Existem outras opções de controle do processo de disparo de gatilho:
ALTER TABLE ... HABILITAR O REPLICA TRIGGER ... - o gatilho será acionado apenas no modo de réplica.
ALTER TABLE ... HABILITAR SEMPRE O TRIGGER ... - o gatilho sempre dispara (obviamente)
fonte
Você também pode desativar os gatilhos no pgAdmin (III):
fonte
também funciona para mim no Postgres 9.1. Eu uso as duas funções descritas por Bartolo-Otrit com algumas modificações. Modifiquei a primeira função para fazê-la funcionar para mim porque o espaço para nome ou o esquema deve estar presente para identificar a tabela corretamente. O novo código é:
então eu simplesmente faço uma consulta de seleção para cada esquema:
fonte