Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/03/2007, 10h04   #1
Invité de passage
 
Inscription : mars 2007
Messages : 3
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 3
Points : 0
Points : 0
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
markusgalileo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/03/2007, 10h08   #2
Membre chevronné
 
Avatar de grabriel
 
Inscription : septembre 2006
Messages : 935
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 935
Points : 626
Points : 626
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.
grabriel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/03/2007, 10h24   #3
Invité de passage
 
Inscription : mars 2007
Messages : 3
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 3
Points : 0
Points : 0
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.
markusgalileo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/03/2007, 11h30   #4
Membre chevronné
 
Avatar de grabriel
 
Inscription : septembre 2006
Messages : 935
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 935
Points : 626
Points : 626
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.
grabriel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/03/2007, 11h57   #5
Invité de passage
 
Inscription : mars 2007
Messages : 3
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 3
Points : 0
Points : 0
ok merci.
markusgalileo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/03/2007, 14h44   #6
Membre chevronné
 
Avatar de grabriel
 
Inscription : septembre 2006
Messages : 935
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 935
Points : 626
Points : 626
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!!
grabriel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/03/2007, 14h55   #7
Expert Confirmé Sénior
 
Avatar de GrandFather
 
Inscription : mai 2004
Messages : 4 490
Détails du profil
Informations personnelles :
Âge : 42

Informations forums :
Inscription : mai 2004
Messages : 4 490
Points : 5 049
Points : 5 049
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
GrandFather est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/04/2008, 10h14   #8
Invité régulier
 
Inscription : février 2005
Messages : 12
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12
Points : 6
Points : 6
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 :
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
alexis_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h55.


 
 
 
 
Partenaires

Hébergement Web