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 :

Ajouter plusieurs lignes sans intérruption lors de viol de contrainte


Sujet :

Requêtes PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 60
    Par défaut Ajouter plusieurs lignes sans intérruption lors de viol de contrainte
    Bonjour,
    Je souhaite ajouter des lignes dans ma table, qui contient une contrainte d'unicité sur deux colonnes (i.e: (col1, col2 ) doit être unique) de sorte que l'existence d'élément dupliqués n'interrompe pas la suite de l'exécution.
    Par exemple si matable contient:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    col1  | col2
    -----------
    animal|chat
    animal|chien
    et que je fais la requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    insert into matable values ('animal','chat'),('animal','souris');
    J'obtiens a la fin:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    col1  | col2
    -----------
    animal|chat
    animal|chien
    animal|souris
    Je ne suis pas sur qu'une telle solution existe, d'autres idées donc sont les bienvenues.
    Merci!

  2. #2
    Membre Expert
    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
    Par défaut
    La solution standard à ce problème est d'utiliser un MERGE plutôt qu'un INSERT, mais hélas cette instruction n'existe pas encore dans PostgreSQL.

    Il faut se rabattre sur une procédure plpgsql avec un SAVEPOINT et une gestion d'exception qui capte l'erreur d'INSERT pour violation de contrainte unique et fait un rollback au savepoint, plutôt que d'arrêter toute la transaction.

  3. #3
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 60
    Par défaut
    Merci beaucoup Estofilo.
    A mon niveau je préférerai plutôt de diviser la requête en une série d'insertion élémentaire exécutées par la page web, avec suppression de messages d'exceptions.
    Bien sur ta solution reste beaucoup plus professionnelle, mais je ne pense pas me pouvoir "rabattre"

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

Discussions similaires

  1. ajouter plusieurs lignes pour une personne
    Par frommage dans le forum VBA Access
    Réponses: 8
    Dernier message: 21/11/2012, 04h18
  2. [Toutes versions] Ajouter plusieurs lignes dans une table automatiquement
    Par bbolt dans le forum Requêtes et SQL.
    Réponses: 0
    Dernier message: 24/01/2010, 15h08
  3. [DOM] Ajouter une ligne sans tout reecrire
    Par RhO dans le forum Format d'échange (XML, JSON...)
    Réponses: 0
    Dernier message: 18/08/2009, 11h33
  4. Texte sur plusieurs lignes sans concaténation
    Par Papy214 dans le forum C#
    Réponses: 6
    Dernier message: 29/12/2008, 16h06
  5. [ComboBox] Ajouter plusieurs lignes
    Par kalou26 dans le forum C++Builder
    Réponses: 2
    Dernier message: 01/06/2006, 20h22

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