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 :

débutant / insert or update


Sujet :

PostgreSQL

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2007
    Messages : 3
    Points : 1
    Points
    1
    Par défaut débutant / insert or update
    Bonjour

    Je découvre postgresql, et j'ai une question toute bête dont je n'ai pas réussi à trouver une réponse claire pour le moment :
    peut on, et si oui comment, faire une requete du type "INSERT OR UPDATE", sans passer par des regles ou des fonctions ?

    j'utilise postgresql 8.0.0 sur windows

    merci d'avance

  2. #2
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Points : 730
    Points
    730
    Par défaut
    Bonjour,

    Tu peux installer PGAdmin c'est un client graphique avec lequel tu pourras faire tes requetes sinon avec le client pgsql en ligne de commande tu te connecte à ta base et tu tapes tes requêtes.

    Sinon tu peux lire la doc ou voir un tutoriel sur la mise en place de postgres ca doit etre expliqué, avec des exemples et peut être même des images.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2007
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    je me suis mal exprimé, ce que je voudrais faire ressemblerait à ça :

    IF EXISTS (SELECT * FROM test WHERE winename='Chateau Lafite 2003')
    UPDATE test SET stock = 47 WHERE winename='Chateau Lafite 2003';
    ELSE
    INSERT INTO test VALUES('Chateau Lafite 2003', '47');
    END IF

    j'ai déjà pgadmin, et j'ai parcouru pas mal de forums pour trouver une solution
    simple à ce problème tres bête, mais j'ai pas du bien chercher...
    tous les exemples sur lesquels je suis tombé impliquaient l'utilisation de triggers
    ou l'application de rules, ce que je voudrais éviter.

  4. #4
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Points : 730
    Points
    730
    Par défaut
    D'après ce que j'ai compris de postgresql IF est une fonction PL/pgSQL (ou autre langage procédural) quand tu fais ta requete c'est du SQL et en SQL y'a pas IF donc tu dois créer une fonction si tu veux faire ta requete avec un IF.

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2007
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    ok merci.

  6. #6
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Points : 730
    Points
    730
    Par défaut
    Je ne dis pas que c'est impossible, je pense que tu devrais plutot chercher du coté de l'execution de contenu de fonction sans créer une fonction... je sais pas si je suis claire là!

    Si tu trouve une solution ca serai cool de la poster!

    Bon courage!!

  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
    Bonjour,

    Citation Envoyé par markusgalileo
    tous les exemples sur lesquels je suis tombé impliquaient l'utilisation de triggers ou l'application de rules, ce que je voudrais éviter.
    Ce sont pourtant (avec l'option procédurale que tu mentionnes) les seules manières correctes de faire. MySQL dispose d'une commande permettant de le faire, mais il s'agit d'une extension MySQL, pas de SQL standard.
    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
    Membre à l'essai
    Inscrit en
    Février 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 14
    Points : 13
    Points
    13
    Par défaut
    Bonjour,

    Je fais remonter ce post un peu ancien : Je me suis mis récement à postgresql, et j'ai aussi été étonné de ne pas trouver aisément comment réaliser ce genre de commande ( UPDATE OR INSERT ). J'ai cru comprendre qu'il n'y avait pas de commande de base pour cela, mais qu'il fallait utiliser les règles et les déclencheurs. J'ai fait des essais, mais je rencontre quelques problèmes : j'ai voulu écrire une règle sur l'INSERT d'une table, qui fait l'insert si l'enregistrement n'existe pas, sinon met l'enregistrement dans une autre table. Cela donne quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CREATE OR REPLACE RULE my_insert AS ON INSERT TO my_table1
    WHERE EXISTS(SELECT NULL FROM my_table1 WHERE id = NEW.id )
    DO INSTEAD INSERT INTO my_table2 (id) VALUES (NEW.id);
    Cela marche plutôt bien : si j'ajoute un enregistrement qui existe déjà, il est ajouté dans la deuxième table. Seulement s'il n'existe pas, il est ajouté dans les deux tables.

    Quelqu'un aurait une réponse ? Et serait-il possible d'avoir une solution ou un exemple référence au problème UPDATE OR INSERT ?

    Merci

Discussions similaires

  1. [Débutant] Requête Insert ou Update exécutée par l’objet ADO
    Par lazerdev dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 11/05/2007, 10h52
  2. [Debutant] Insert ou update...
    Par kluh dans le forum Oracle
    Réponses: 15
    Dernier message: 13/07/2005, 14h35
  3. Réponses: 3
    Dernier message: 11/01/2005, 08h20
  4. événement sur INSERT, DELETE, UPDATE
    Par papouAlain dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 24/12/2004, 15h40
  5. [Débutant][PS] modifier un insert en update
    Par franculo_caoulene dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 19/05/2004, 16h33

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