Vous n'êtes pas identifié(e).

#1 08/07/2015 12:13:44

jpl
Membre

TRIGGER : Erreur "... being used by active queries in this session"

Bonjour.
J'ai un trigger en INSERT qui doit, entre autre, désactiver un autre trigger en UPDATE en début d'exécution et le réactiver en fin.
Les deux triggers sont rattachés à le même table.
Sauf que lorsque je lance une requête INSERT j'ai le message suivant :

ERROR:  cannot ALTER TABLE "sig_conformite" because it is being used by active queries in this session
CONTEXT:  SQL statement "Alter table sig_conformite disable trigger t_conformite_up_alerte"
PL/pgSQL function "conformite_insert" line 7 at SQL statement

Pour le besoin j'ai simplifié au maximum les triggers :

CREATE OR REPLACE FUNCTION conformite_insert()
  RETURNS trigger AS
$BODY$DECLARE

BEGIN

Alter table sig_conformite disable trigger t_conformite_up_alerte;

return 	NEW; 
END;$BODY$
  LANGUAGE plpgsql VOLATILE SECURITY DEFINER
  COST 100;
ALTER FUNCTION conformite_insert()
  OWNER TO postgres;

CREATE TRIGGER t_conformite_insert
  BEFORE INSERT
  ON sig_conformite
  FOR EACH ROW
  EXECUTE PROCEDURE conformite_insert();

Le trigger update se contente de renseigner un variable et de me retourner l'info avec un raise notice.

Il semble donc qu'un trigger sur une table ne puisse en désactiver un autre sur la même table quand bien même les fonctions INSERT et UPDATE sont bien distinguées . Quelqu'un peut-il me le confirmer ?
L'option qu'il me reste est l'utilisation des variables TG_OP
Cordialement
JP

Dernière modification par jpl (08/07/2015 12:24:49)

Hors ligne

#2 08/07/2015 13:25:53

rjuju
Administrateur

Re : TRIGGER : Erreur "... being used by active queries in this session"

Bonjour,

Aucune idée si un trigger peut désactiver un autre trigger sur une même table, mais ça me parait intuitivement une mauvaise idée de toutes façons. Quel problème cherchez vous à résoudre exactement ?

Hors ligne

#3 08/07/2015 14:54:06

jpl
Membre

Re : TRIGGER : Erreur "... being used by active queries in this session"

J'ai une table A sur un serveur A alimentée par un trigger positionné sur un serveur B avec des bases que je n'administre pas.
Lorsque les utilisateurs métier sur  B créent un nouvel objet, alors ma table A est implémentée.
D'où un premier trigger INSERT qui va balancer un certain nombre d'update sur cette même table A (par exemple je récupère la géométrie de mon nouvel objet et je l'affecte à tous les dossiers qui ont le même numéro).
J'ai un deuxième trigger UPDATE qui permet de prendre en compte les modifications apportées par mes utilisateurs métier  et d'impacter tous les objets ayant le même numéro de dossier ( exemple je modifie la géométrie d'un objet et j'applique cette modification à tous les dossiers ayant le même numéro). Mais je ne souhaite pas qu'il se déclenche lorsque j'effectue un update à partir de mon trigger INSERT, d'où la tentative de désactivation du trigger UPDATE

JP

Hors ligne

#4 08/07/2015 15:21:47

rjuju
Administrateur

Re : TRIGGER : Erreur "... being used by active queries in this session"

Ok...

Peut-être que session_replication_role pourrait vous aider (voir http://docs.postgresql.fr/9.4/sql-altertable.html ).

Hors ligne

#5 08/07/2015 15:31:52

jpl
Membre

Re : TRIGGER : Erreur "... being used by active queries in this session"

Merci.
Je regarde la doc et vois ce que je peux faire.
Cordialement
JP

Hors ligne

Pied de page des forums