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 :

Instead rules à l'insertion


Sujet :

PostgreSQL

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2005
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2005
    Messages : 78
    Points : 70
    Points
    70
    Par défaut Instead rules à l'insertion
    Bonjour,

    Je fait des tests afin de mettre en place un partitionnement par année d'une table sous Postgresql 8.1. La doc en ligne préconise d'utiliser les rules pour gérer les opérations d'insertion, maj et delete.

    J'ai donc déclarer des règles à l'insertion sur ma table mère pour chacune des tables filles qui insèrent les données dans les tables filles.

    Par exemple : La table mère est MaTable, j'ai deux tables filles : MaTable_2010 et MaTable_2011 et deux règles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    CREATE OR REPLACE RULE matable_insert_2010 AS
        ON INSERT TO MaTable
       WHERE new.annee = 2010::numeric DO INSTEAD INSERT INTO MaTable_2010 VALUES (...);
     
     
    CREATE OR REPLACE RULE matable_insert_2011 AS
        ON INSERT TO MaTable
       WHERE new.annee = 2011::numeric DO INSTEAD INSERT INTO MaTable_2011 VALUES (...);
    Mon problème est que lorsque j'insère une ligne dans MaTable, celle ci est bien insérée dans la bonne table fille en fonction de son année, mais également dans la table mère !

    Comment faire pour que les données soit uniquement insérées dans les tables filles ???

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 736
    Points : 52 447
    Points
    52 447
    Billets dans le blog
    5
    Par défaut
    Lisez l'article que j'ai écrit à ce sujet : http://blog.developpez.com/sqlpro/p1...araison-postg/
    mais sachez que le partitionnement dans PG est une vaste plaisanterie (pour ne pas dire de gros mot...) et qu'il vaut mieux l'éviter à tout prix, tant qu'il n'y aura pas une solution performante.

    Au passage un autre article sur quand faut-il partitionner... http://blog.developpez.com/sqlpro/p9...r-ameliorer-l/

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Citation Envoyé par arno15 Voir le message
    Mon problème est que lorsque j'insère une ligne dans MaTable, celle ci est bien insérée dans la bonne table fille en fonction de son année, mais également dans la table mère !

    Comment faire pour que les données soit uniquement insérées dans les tables filles ???
    Bonjour,

    Pour la version 8.1 je ne saurai dire.

    Par contre en 9.1 les lignes ne sont pas insérées dans la table mère si vos rule instead of sont bonnes.

    Vous pouvez vérifier ceci assez facillement en regardant la taille de votre table mère qui doit être de 0.

  4. #4
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2005
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2005
    Messages : 78
    Points : 70
    Points
    70
    Par défaut
    Merci pour vos réponses.

    La taille de la table mère ne reste pas à 0 malgré la présence d'un trigger interdisant l'insertion dans celle-ci. J'ai cependant l'impression que celui-ci n'est pas appelé.

    Bref je vais investiguer un peu même si l'article posté part @SQLpro montre bien que le partitionnement postgres est un peu chaotique et me fait réfléchir sur le gain de perfs.

    Merci en tout cas. @+

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    Citation Envoyé par arno15 Voir le message
    Mon problème est que lorsque j'insère une ligne dans MaTable, celle ci est bien insérée dans la bonne table fille en fonction de son année, mais également dans la table mère !
    Mais pour lire la table mère après insertion, est-ce que tu mets le mot clef ONLY avant le nom de table pour ne pas avoir aussi les données des tables filles?
    Le cas échéant, c'est ça le problème.

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

Discussions similaires

  1. SqlBulkCopy & Trigger instead of INSERT
    Par Nono3013 dans le forum Développement
    Réponses: 4
    Dernier message: 07/11/2008, 22h00
  2. Création d'un trigger INSTEAD OF INSERT
    Par LestoK dans le forum Développement
    Réponses: 4
    Dernier message: 03/09/2008, 14h53
  3. Réponses: 32
    Dernier message: 21/08/2008, 13h27
  4. [SQL2K] TRIGGER - Instead of Insert
    Par buchette dans le forum Développement
    Réponses: 3
    Dernier message: 04/06/2008, 18h33
  5. INSTEAD OF + INSERT = Boucle infinie ?
    Par Monstros Velu dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 06/07/2006, 16h59

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