PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

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

#1 PL/pgSQL » disable trigger pendant l'execution du trigger » 01/02/2011 10:32:21

philippe.pasquali
Réponses : 0

Bonjour

Question :
------------
Est-il possible de désactiver un trigger pendant l'execution de ce dernier ?

Explications :
---------------
Soit une table A = {code_article, code_langue, libelle_article} avec un trigger sur Insert (On supose pour le test que la table est vide...)
J'insert {'TOTO','ENG','Libellé en anglais'} et je veux avoir au final non pas un enregistrement mais deux enregistrements :
{'TOTO','ENG','Libellé en anglais'}
{'TOTO','FRA','Libellé en anglais'}

Pour cela dans le trigger, je pensais faire pour ajouter mon enregistrement suplémentaire :

alter table libelle_article disable trigger all;              -- desactive les triggers pour pouvoir ajouter le second enregistrement
insert.....................................................              -- ajout suplémentaire
alter table libelle_article enable trigger all;              -- réactive les triggers

Message d'erreur :
---------------------
ERROR: relation "libelle_article" is being used by active queries in this session
CONTEXT : SQL statement "ALTER TABLE libelle_article disable trigger all"
PL/pgSQL function "fnc_on_libelle_article" line 44 at SQL statement

Une idée ????
Merci d'avance......

#2 Général » Mes triggers ne veuelnt plus être enable » 06/02/2010 22:50:36

philippe.pasquali
Réponses : 1

Bonsoir

Je suis en train de déplacer une base d'un vieux serveur (red hat 9) sur un tout neuf (debian lenny) tout en modifiant la version de postgresql
J’ai lancé une comparaison des deux bases et j'ai 44 erreurs. Toutes concernent les triggers (plsql) qui sont marqués comme disabled

J’ai fais un test sur une table qui ne possédait pas de trigger

CREATE TRIGGER "temp_tr" BEFORE INSERT OR UPDATE ON "public"."temp" FOR EACH ROW EXECUTE PROCEDURE "public"."fnc_on_test"();
ALTER TABLE "public"."temp" ENABLE TRIGGER "temp_tr";

Rien ne se passe il reste désespérément DISABLE probléme de droits ?? mais je suis logé en 'postgres' !!

Le serveur doit être opérationel lundi à 8h00... des idées car je séche !

UN GRAND MERCI D'AVANCE

#3 Re : Réplication » Réplication de deux bases distantes » 28/10/2009 14:17:44

Bonjour
Concernant les outils graphiques de gestion j'utilise EMS Postgresl Manager
Il est sous Windows et malheureusement payant mais il est très complet.
La même chose sous linux et j'abandonne EMS...
Concernant la réplication, j’attends avec impatience la future version qui devrait implémenter quelque chose. Il parait que la version 8.4 devait le faire mais comme ce n'était pas encore au point il ne l'on pas implanté).

#4 Re : Général » Fonction avec comportement spécial » 16/10/2009 08:53:47

Bonjour
Aprés une toute petite modif, votre version fonctionne en exécution ( ce qui est mieux que ma version) et là ou c'est bizard en mode debug (pas à pas) elle ne fonctionne pas (EMS doit avoir un probléme)...
Mais bon je clotûre la discution car elle fonctionne dans l'executable
Merci encore...

#5 Général » Fonction avec comportement spécial » 15/10/2009 09:21:42

philippe.pasquali
Réponses : 3

Bonjour
Débutant en pl/sql j'ai ce petit probleme de fonction à vous soumettre:
Une table contient des lignes dont je veux en recopier certaines en modifiant deux colonnes
Le but est de dupliquer si il n'existent pas les enregistrement de (semaine=42et année=2009) en changeant l'année 2009 en 2010 et la semaine 42 en 43

Ainsi si j'ai :
2009 42 toto
2008 41 titi

j'aurais aprés l'execution de select copy_semaine(2009, 42, 2010, 43) :
2009 42 toto
2008 41 titi
2010 43 toto

Le truc c'est que si je lance l'execution de la fonction 2 fois elle ne doit pas me créer de doublon, hors :
- En mode "pas à pas" : pas de doublon ==> ok
- En mode "normal"     : j'ai toutes mes lignes en double ==> ko


/* CODE DE LA FONCTION */

CREATE OR REPLACE FUNCTION "public"."copy_semaine" (annee1 integer, semaine1 integer, annee2 integer, semaine2 integer) RETURNS boolean AS
$body$
DECLARE
annee_in alias for $1;
semaine_in alias for $2;
annee_out alias for $3;
semaine_out alias for $4;
--
xnom_societe text;
xnom_interimaire text;
xprenom_interimaire text;
xstatus_mission text;
xnom_atelier text;
xjour_arrivee text;
xcode_prestataire text;
nbrec integer;

--
cOrigine CURSOR (cAnnee integer, cSemaine integer) IS
SELECT nom_societe, nom_interimaire, prenom_interimaire,
status_mission, nom_atelier, jour_arrivee, code_prestataire
FROM interim_feuille
WHERE annee = cAnnee
AND numero_semaine = cSemaine
AND status_mission = 'MC';

BEGIN
OPEN cOrigine(annee_in, semaine_in);
FETCH cOrigine INTO xnom_societe, xnom_interimaire, xprenom_interimaire, xstatus_mission, xnom_atelier, xjour_arrivee, xcode_prestataire;

WHILE FOUND LOOP

select into nbrec count(*) from interim_feuille
where nom_societe = xnom_societe
and nom_interimaire = xnom_interimaire
and prenom_interimaire = xprenom_interimaire
and annee = annee_out
and numero_semaine = semaine_out;

if nbrec = 0 then

insert into interim_feuille
(nom_societe, numero_semaine, nom_interimaire, prenom_interimaire, status_mission,
nom_atelier, jour_arrivee, code_prestataire, annee)
values
(xnom_societe, semaine_out, xnom_interimaire, xprenom_interimaire, xstatus_mission,
xnom_atelier, xjour_arrivee, xcode_prestataire, annee_out);

end if;

FETCH cOrigine INTO xnom_societe, xnom_interimaire, xprenom_interimaire, xstatus_mission, xnom_atelier, xjour_arrivee, xcode_prestataire;

END LOOP;

RETURN true;

END;
$body$
LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER

Merci de votre aide...

#6 Re : Réplication » Réplication de deux bases distantes » 07/10/2008 12:12:33

BONJOUR
Dans une fonction trigger existe-t-il une variable system qui contiendrai l'ordre sql, COMPLET, executé ?

#10 Re : Réplication » Réplication de deux bases distantes » 23/09/2008 10:13:37

L'idée est que si un enregistrement change dans une table d'une des deux base, est de reproduire la modification dans l'autre base le plus rapidement possible.

#11 Réplication » Réplication de deux bases distantes » 23/09/2008 09:57:00

philippe.pasquali
Réponses : 28

Bonjour
Existe-t-il un moyen "simple" mais efficace de synchroniser deux bases distante ?

Pied de page des forums

Propulsé par FluxBB