j'ai une gâchette dans PostgreSQL 9.1 que je souhaite tirer sur des inserts de plusieurs tables. Est-il possible de l'avoir affecter toutes ces tables au lieu de créer la gâchette pour toutes ces tables? J'ai 58 tables que je veux utiliser le même déclencheur d'insertion qui appelle une fonction de déclenchement, alors j'ai utilisé
create trigger tuweke
after insert on product
for each row execute procedure tuwekeAdjustextract();
create trigger tuweke
after insert on caneweightment
for each row execute procedure tuwekeAdjustextract();
...
faire cela pour toutes ces tables, puis nous avons plusieurs schémas, la charge de travail est donc beaucoup, peut-elle être faite dans une requête? Ensuite, affectez-vous toutes les tables de ce schéma ou de toute la base de données?
Il n'y a pas d'option comme ça. Un déclencheur appartient à une table et c'est ça. Toutefois, si tous vos déclencheurs utilisent la même procédure, vous pouvez facilement générer une belle sortie de texte avec tous les CREATE TRIGGER
déclarations. La seule chose à faire est de collecter les noms de table souhaités, puis de préparer et d'affirmer les pièces nécessaires à ceux-ci.
Vous pouvez obtenir tous les noms de table d'un schéma donné avec une requête comme celle-ci:
SELECT p.tablename
FROM pg_tables p
WHERE p.schemaname = 'public'
;
Si maintenant vous sélectionnez
'CREATE TRIGGER tuweke
AFTER INSERT ON ' || p.tablename || '
FOR EACH ROW EXECUTE PROCEDURE tuwekeAdjustextract();
'
à la place de p.tablename
alors vous êtes prêt. Copiez la sortie et exécutez-la.