Question

J'utilise en fonction du temps « classique » partitionnement en utilisant des déclencheurs. J'ai trouvé un besoin d'un déclencheur séparé, qui fonctionne sur la table d'origine.

CREATE TABLE twitter_interactions(...);
CREATE OR REPLACE FUNCTION insert_twitter_interactions ...;
CREATE TRIGGER insert_twitter_interactions_trig
  BEFORE INSERT OR UPDATE on twitter_interactions
  FOR EACH ROW EXECUTE PROCEDURE insert_twitter_interactions();

CREATE OR REPLACE FUNCTION maintain_data_pointers ...;
CREATE TRIGGER maintain_data_pointers_trig
  BEFORE INSERT OR UPDATE on twitter_interactions
  FOR EACH ROW EXECUTE PROCEDURE insert_twitter_interactions();

Je n'ai pas entièrement vérifié, mais je soupçonne que les pistes logiques de partitionnement avant le déclenchement de maintenir, et depuis la ligne ne se termine pas dans la table parent, le 2e déclenchement ne incendies.

Qu'est-ce qui se passe si je veux courir un AFTER INSERT OR UPDATE aussi bien? Étant donné que la ligne ne fait pas dans la table d'origine, je suis à une perte pour mettre en œuvre la logique après.

Était-ce utile?

La solution

Je ne pouvais pas le dire mieux que le manuel fait ici :

En cas de retours ou de déclenchement BEFORE INSTEAD OF NULL, l'opération est abandonnés pour cette ligne et les déclencheurs suivants ne sont pas déclenchés (pour cette ligne).

Ni le (par ordre alphabétique) déclenche plus tard sur le même événement, ni aucun déclenche AFTER se déclenche, si le déclencheur de BEFORE annule.

Autres conseils

PostgreSQL exécute les déclencheurs dans l'ordre alphabétique par nom. Donc, assurez-vous d'utiliser des noms qui les obtiennent dans l'ordre que vous voulez. De la documentation

spécifie que SQL plusieurs triggers doivent être déclenchés en temps de création commande. PostgreSQL utilise pour nom, qui a été jugé plus commode.

BTW SQL crée le même déclencheur deux fois.

Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange
scroll top