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 sur la création de table : insersion de colonnes [9.5]


Sujet :

Requêtes PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2015
    Messages : 4
    Par défaut Trigger sur la création de table : insersion de colonnes
    Bonjour,

    Je suis en train de créer une petite base pour tester le développement de fonctions pour un projet plus conséquent et je souhaite que chaque table de la base dispose d'une colonne user_last_modif et date_last_modif alimentée par un trigger récupérant l'utilisateur et le timestamp à chaque modif. Le trigger est fait et fonctionnel sur deux tables, mais ce que je souhaiterais pour faciliter les choses c'est que lors de la création d'une table, les colonnes et le trigger associé soient générés automatiquement. Je suppose qu'il faut utiliser les triggers sur évènements mais malgré mes recherches je n'arrive pas à comprendre leur fonctionnement...

    Quelqu'un saurait il me donner quelques pistes? Merci beaucoup!

  2. #2
    Membre Expert
    Avatar de alassanediakite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 1 599
    Billets dans le blog
    8
    Par défaut
    Salut
    Pour le moment, PostgreSQL possède deux types de triggers: les triggers DML (insert, update, delete) et les triggers DDL (create, alter, drop).
    Ton cas s'approche des triggers DDL. Mais malheureusement, ces triggers sont trop limités dans PostgreSQL, notamment ils ne peuvent résoudre ton cas.
    Espéreront que les développeurs améliorent d'avantage ce type de trigger, et qu'ils pensent aux triggers sur connexion à une BD (comme SQL server).
    Pour revenir à ton cas. Je pense que la solution serait de créer une table fictive avec les colonnes communes puis de lancer tes commande CREATE TABLE avec le paramètre LIKE ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE TABLE TX(..., LIKE tfictive INCLUDING DEFAULTS)
    @+

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2015
    Messages : 4
    Par défaut
    Bonjour,

    Merci beaucoup pour ta réponse très précise! C'est effectivement dommage que ce cas de figure ne soit pas prévu, c'est en tout cas intéressant d'apercevoir les limites de PostgreSQL... Je vais tester ta solution quand j'aurais un peu de temps et reviendrais donner un retour!

  4. #4
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2015
    Messages : 4
    Par défaut
    Finalement j'ai adopté une solution un peu barbare mais qui fonctionne plutôt bien... J'ai enregistré une requête de création de table type, du coup j'ai juste à faire un rechercher/remplacer pour changer les noms de schéma et table et de rajouter les colonnes que je souhaite. C'est pas super propre mais c'est simple, efficace et rapide!

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    CREATE TABLE schemaname.tablename
    (
      id_tablename serial NOT NULL,
     
      colonne1 type,
      colonne2 type,
     
      geom geometry(Point,3948),
      user_last_modif character varying(254),
      date_last_modif timestamp without time zone,
      CONSTRAINT pk_tablename PRIMARY KEY (id_tablename)
    );
     
    ALTER TABLE schemaname.tablename
      OWNER TO schemaname;
    GRANT ALL ON TABLE schemaname.tablename TO schemaname WITH GRANT OPTION;
    GRANT SELECT ON TABLE schemaname.tablename TO public;
    COMMENT ON TABLE schemaname.tablename
      IS 'Description table';
    COMMENT ON COLUMN schemaname.tablename.id_tablename IS 'identifiant unique';
    COMMENT ON COLUMN schemaname.tablename.user_last_modif IS 'identifiant de la personne ayant effectué la dernière modification de l''enregistrement';
    COMMENT ON COLUMN schemaname.tablename.date_last_modif IS 'Date et heure de dernière modification';
     
     
    CREATE INDEX sidx_tablename_geom
      ON schemaname.tablename
      USING gist
      (geom);
     
    CREATE TRIGGER last_modif BEFORE INSERT OR UPDATE ON schemaname.tablename
        FOR EACH ROW EXECUTE PROCEDURE schemaname.last_modif();

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

Discussions similaires

  1. Diverses questions sur la création de tables
    Par miltone dans le forum Débuter
    Réponses: 15
    Dernier message: 27/12/2009, 12h03
  2. Problème sur une création de table !
    Par pierre24 dans le forum SAS Base
    Réponses: 3
    Dernier message: 21/05/2008, 13h58
  3. trigger sur la création d'une table
    Par kimcharlene dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 14/04/2008, 17h08
  4. erreur sur script création de tables
    Par PickEpique dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 15/03/2007, 18h24
  5. [Oracle 9i] Triggers sur les updates de tables
    Par zestrellita dans le forum Oracle
    Réponses: 12
    Dernier message: 07/12/2005, 11h32

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