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

PostgreSQL Discussion :

Héritage et Rule..


Sujet :

PostgreSQL

  1. #1
    dclink
    Invité(e)
    Par défaut Héritage et Rule..
    Hello tt le monde.

    J ai un petit souci, donc j ai crée une table mère, les tables filles sont crées dynamiquement avec un trigger avant un insert,update ou delete, pour ça pas de souci, le problème c est qu à la première insertion, il enregistre dans la table mère, à partir de la seconde insertion il prend bien en compte la rule qui lui dit de taper dans les tables filles donc cela voudrait dire qu à la première insertion les rules n existent pas encore ??

    Merci d avance.

  2. #2
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Bonjour,

    j'ai du mal à me figurer la chose... Une description un peu plus détaillée de ta règle et de ton trigger pourrait aider...
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  3. #3
    dclink
    Invité(e)
    Par défaut
    Ma procédure qui crée la table + les rules qui vont bien donne en gros ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Vérifie si la table fille existe ...
    Si la table n'existe pas 
    CREATE TABLE table || année || mois || contrainte sur la date >= premier jour du mois et < premier jour du mois suivant inherits (table mère);
    CREATE UNIQUE INDEX sur le champ date;
    CREATE RULE table || année || mois || _insert_rl AS ON INSERT TO table mère ||... (en fonction de la date) ... || DO INSTEAD INSERT INTO table fille etc ... 
    CREATE RULE table || année || mois || _delete_rl AS ON DELETE TO table mère || ... || DO INSTEAD DELETE FROM table fille WHERE date = telledate
    etc...
    Comme je disais plus haut la table fille et les règles sur la table mère sont bien crées dès qu une insertion est tenté si et seulement si la table fille n existe pas, les règles sont bonnes etc ...

    Le problème se situe au fait que quand je fais une insertion et que la table fille n est pas crée on dirait que PostgreSQL fait l insertion et crée les règles et la table fille ensuite ce qui fait que l enregistrement se fait dans la table mère du coup ensuite dès que je fais une seconde insertion là par contre les rules sont bien pris en compte et l enregistrement se fait bien sur la table fille ...

  4. #4
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Citation Envoyé par dclink
    Le problème se situe au fait que quand je fais une insertion et que la table fille n est pas crée on dirait que PostgreSQL fait l insertion et crée les règles et la table fille ensuite ce qui fait que l enregistrement se fait dans la table mère du coup ensuite dès que je fais une seconde insertion là par contre les rules sont bien pris en compte et l enregistrement se fait bien sur la table fille ...
    En principe, l'action des règles s'effectue en amont de celle des triggers... Du fait que le code de création des règles se trouve dans un trigger, elles ne seront opérationnelles qu'à la fin de la transaction.

    D'une manière générale, je te déconseille fortement d'employer des commandes DDL dans des fonctions trigger à cause des effets de bord indésirables et complexes à appréhender qui peuvent en résulter. Il y a forcément un moyen différent et plus « clean » d'obtenir ce que tu souhaites.
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  5. #5
    Membre éclairé
    Avatar de gerald2545
    Profil pro
    Inscrit en
    Février 2003
    Messages
    744
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 744
    Points : 773
    Points
    773
    Par défaut
    je vais peut-être dire une connerie mais tu ne dois pas faire un commit après la création de ta table fille et de tes rules avant d'insérer dedans?

  6. #6
    dclink
    Invité(e)
    Par défaut
    GrandFather > A moins de créer les tables et les rules d avance j ai pas trouvé d autres moyens mais ça m embeterait pas mal de créer une tache cron, sans couter le cout éventuel, il doit y avoir un autre moyen mais j ai rien trouvé sur le grand ternet

    gerald2545 > Je ne pense pas d'autres avis ??

  7. #7
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Citation Envoyé par dclink
    GrandFather > A moins de créer les tables et les rules d avance j ai pas trouvé d autres moyens mais ça m embeterait pas mal de créer une tache cron, sans couter le cout éventuel, il doit y avoir un autre moyen mais j ai rien trouvé sur le grand ternet
    Je ne saisis pas trop pourquoi il te faudrait une tâche cron pour cela.
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  8. #8
    dclink
    Invité(e)
    Par défaut
    Citation Envoyé par GrandFather
    Je ne saisis pas trop pourquoi il te faudrait une tâche cron pour cela.
    En fait les tables filles sont du type nomtable+annee+mois donc je pensais créer une tache cron lancée tous les 31 décembre qui créerait toutes les tables filles de l année suivante et les règles qui vont avec, en tous les cas j ai l impression qu il faut créer les tables à l avance j espère trouver un autre moyen ...

  9. #9
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Et pourquoi tu ne crées pas une seule table utilisée en permanence, et qui intégrerait les informations mois & année dans des champs ?
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  10. #10
    dclink
    Invité(e)
    Par défaut
    Lol c est pas possible j ai beaucoup trop d enregistrement par mois, le partionnement s impose

  11. #11
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Si tu dois absolument partitionner tes données dans des tables différentes, il vaut effectivement mieux détacher cette tâche d'administration dans un script Shell/SQL. Les triggers et règles ne sont pas vraiment conçus pour ce genre d'utilisation...
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  12. #12
    dclink
    Invité(e)
    Par défaut
    J ai trouvé une solution qui marche dans la procédure quand la table n existe pas je rajoute une requete insert vers la table fille puis je retourne un NULL

  13. #13
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Je suis content pour toi que cela fonctionne, mais on est pas très loin d'un vilain hack quand même...
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  14. #14
    dclink
    Invité(e)
    Par défaut
    Ben en l abscence de réponse même sur la ml ...

Discussions similaires

  1. héritage de "custom build rule"
    Par nec3 dans le forum Visual Studio
    Réponses: 0
    Dernier message: 22/07/2009, 11h08
  2. [Postgresql]Héritage
    Par lheureuxaurelie dans le forum PostgreSQL
    Réponses: 13
    Dernier message: 02/10/2008, 09h18
  3. [XML Schemas]héritage multiple
    Par nicolas_jf dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 10/06/2003, 12h55
  4. [Postgres] Héritage + Clés
    Par k-reen dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 21/05/2003, 16h37
  5. Héritage entre Forms
    Par BarBal dans le forum Composants VCL
    Réponses: 7
    Dernier message: 29/08/2002, 17h44

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