Je charge des données en masse et je peux recalculer toutes les modifications de déclencheur beaucoup moins cher après coup que sur une base ligne par ligne.
Comment puis-je désactiver temporairement tous les déclencheurs dans PostgreSQL?
postgresql
triggers
bulkinsert
David Schmitt
la source
la source
ENABLE REPLICA
ouENABLE ALWAYS
.10.4
et il semble ignorer cette déclaration ci-dessus.PostgreSQL connaît la
ALTER TABLE tblname DISABLE TRIGGER USER
commande, qui semble faire ce dont j'ai besoin. Voir ALTER TABLE .la source
ALTER TABLE ... DISABLE TRIGGER USER
nécessite un verrou exclusif sur la table.Pour désactiver le déclencheur
Pour activer le déclencheur
la source
ALTER TABLE table_name DISABLE TRIGGER all
Cela ne fonctionne pas avec PostgreSQL 9.4 sur ma machine Linux si je change une table via l'éditeur de table dans pgAdmin et fonctionne si je change de table via une requête ordinaire. Les changements manuels dans la table pg_trigger ne fonctionnent pas non plus sans redémarrage du serveur mais avec une requête dynamique comme sur postgresql.nabble.com ACTIVER / DÉSACTIVER TOUS LES DÉCLENCHEMENTS DANS LA BASE DE DONNÉES fonctionnent. Cela peut être utile lorsque vous avez besoin de quelques réglages.
Par exemple, si vous avez des tables dans un espace de noms particulier, cela pourrait être:
Si vous souhaitez désactiver tous les déclencheurs avec certaines fonctions de déclenchement, cela peut être:
Documentation PostgreSQL pour les catalogues système
Il existe d'autres options de contrôle du processus de déclenchement de déclenchement:
ALTER TABLE ... ENABLE REPLICA TRIGGER ... - le déclencheur se déclenchera en mode réplique uniquement.
ALTER TABLE ... ENABLE ALWAYS TRIGGER ... - la gâchette se déclenchera toujours (évidemment)
la source
Vous pouvez également désactiver les déclencheurs dans pgAdmin (III):
la source
aussi travailler pour moi dans Postgres 9.1. J'utilise les deux fonctions décrites par bartolo-otrit avec quelques modifications. J'ai modifié la première fonction pour qu'elle fonctionne pour moi car l'espace de noms ou le schéma doit être présent pour identifier correctement la table. Le nouveau code est:
alors je fais simplement une requête de sélection pour chaque schéma:
la source