IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes PostgreSQL Discussion :

Trigger historisation sur les couches [9.6]


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Géomaticien en Télécom
    Inscrit en
    Février 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Géomaticien en Télécom
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2018
    Messages : 15
    Points : 11
    Points
    11
    Par défaut Trigger historisation sur les couches
    Bonjour,

    je suis tout novice dans l'utilisation de PostgreSQL.
    J'ai installé pgAdmin 4 pour PostgreSQL 10. J'utilise l'extension POSTGIS, pour une base spatiale.

    Ma demande est la suivante : Je souhaite avoir un suivi des modifications (INSERT, UPDATE) pour chaque couche de ma base.
    Cela se présente sous la forme de 4 champs qui se rajoutent à ceux existant des tables : CREATE_DATE, CREATE_USER, MODIF_DATE, MODIF_USER

    Nom : 2018-02-14_14h21_02.png
Affichages : 241
Taille : 5,9 Ko

    Où je souhaite avoir la date de création de l'enregistrement, l'auteur de la création (donc automatisation lors de la création de l'enregistrement)
    Puis la date de modification de l'enregistrement ainsi que son auteur (lors d'une modification de l'enregistrement. Lors de la création ces cellules sont vides)


    J'ai réussi à créer un tableau d'historisation, en utilisant un trigger (trop content d'avoir réussi), mais cela ne répond pas vraiment au besoin.

    Je pense qu'il faut passer par plusieurs étapes, 2 sûrement, via des triggers.

    Pourriez-vous m'aider s'il vous plait ?

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Bonjour,

    Vous pouvez le faire à l'aide d'une seule fonction trigger qui gère les deux événements (INSERT et UPDATE), comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    CREATE OR REPLACE FUNCTION table_audit() RETURNS TRIGGER AS 
    $$
    BEGIN 
        IF TG_OP = 'INSERT' THEN
            NEW.create_date = NOW();
            NEW.create_user = CURRENT_USER;
        ELSIF TG_OP = 'UPDATE' THEN
            NEW.mod_date = NOW();
            NEW.mod_user = CURRENT_USER;
        END IF;
     
        RETURN NEW;
     
    END;
    $$
    LANGUAGE plpgsql;
    Ensuite, vous créez un trigger appelant cette fonction sur chacune des tables que vous voulez auditer, comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TRIGGER ma_table_audit 
        BEFORE INSERT OR UPDATE 
        ON ma_table 
        FOR EACH ROW 
        EXECUTE PROCEDURE table_audit();
    Voilà pour le principe...
    Je n'ai pas testé, c'est écrit "à la volée", donc il peut y avoir quelques erreurs à corriger...
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    J'ajouterai que la partie INSERT vous pouvez ne pas mettre de déclencheur et utilisez les propriétés "default" des colonnes.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Géomaticien en Télécom
    Inscrit en
    Février 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Géomaticien en Télécom
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2018
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Tout d'abord merci beaucoup pour cette rapidité de réponse.

    (petit détail sur ce site.. comment puis je ajouter ces tableaux où se trouvent les lignes de code !! .. ça me permettrait de mieux montrer si je fais des modifications...)

    Je pense que dans la partie du CREATE TRIGGER : il faudrait que j'enlève UPDATE, car ces champs doivent être créer au moment de la création de la table (insérée via le module "PostGIS Shapefile Import/Export Manager")

  5. #5
    Membre à l'essai
    Homme Profil pro
    Géomaticien en Télécom
    Inscrit en
    Février 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Géomaticien en Télécom
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2018
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Après lecture du manuel Postgresql et test, le trigger ne fonctionne pas du tout. Je n'ai pas de création de champ. Est-ce par ce que je passe par ce module d'import de PostGIS ?

    Dois je plutôt utiliser un WHEN dans le trigger..
    La réponse n'est pas très loin mais il manque quelque chose.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Géomaticien en Télécom
    Inscrit en
    Février 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Géomaticien en Télécom
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2018
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Après essai, j'ai préféré créer les champs avec quelques lignes de codes.
    Cette opération sera à répéter une dizaine de fois (nombre de tables dans la base à exploiter). Ce n'est pas énorme et cela ne prend pas tant de temps.

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    -- création des champs à ajouter
    ALTER TABLE lignes
    ADD COLUMN CREATE_DATE date,
    ADD COLUMN CREATE_USER character varying (30),
    ADD COLUMN MAJ_DATE date,
    ADD COLUMN MAJ_USER character varying (30),
    ADD COLUMN LENGHT numeric (20,2);

    je vais regarder un peu comment faire la mise à jour auto de ces champs par contre.

    Merci à vous deux !

  7. #7
    Membre à l'essai
    Homme Profil pro
    Géomaticien en Télécom
    Inscrit en
    Février 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Géomaticien en Télécom
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2018
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    ced,

    ta solution marche bien du coup avec mes champs ! je te remercie mille fois !!

  8. #8
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Citation Envoyé par LJA54 Voir le message
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    ADD COLUMN LENGHT numeric (20,2);
    Je pinaille, mais en anglais longueur s'orthographie LENGTH.
    De surcroît, quelle information allez vous insérer dedans ?

  9. #9
    Membre à l'essai
    Homme Profil pro
    Géomaticien en Télécom
    Inscrit en
    Février 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Géomaticien en Télécom
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2018
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Bonjour Waldar

    dans ce champ mal orthographié ? (c'est modifié )
    il y aura seulement la longueur total des polylignes.
    Je suis en train de regarder pour créer le trigger de mise à jour automatique.

    Pour info : je travaille dans les réseaux. Du coup, beaucoup de nœuds et d'arcs.
    les polylignes sont importantes et pour avoir des longueurs à jour, il faut qu'un champ soit automatisé pour ne pas se poser la question de l'actualisation.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment empêcher l'affichage des informations sur les couches ?
    Par Zebulon777 dans le forum IGN API Géoportail
    Réponses: 4
    Dernier message: 01/02/2016, 15h18
  2. [Théorie] Questions sur les couches/protocoles réseaux
    Par Raikyn dans le forum Protocoles
    Réponses: 16
    Dernier message: 29/01/2015, 14h21
  3. Réponses: 3
    Dernier message: 20/02/2014, 15h22
  4. [reseau de neurones]cb de neurones sur les couches ?
    Par oniric dans le forum Méthodes prédictives
    Réponses: 3
    Dernier message: 27/05/2007, 10h08
  5. Petite aide sur les triggers ?
    Par krimson dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 16/04/2004, 16h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo