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 23/04/2005, 14h55   #1
Membre régulier
 
Inscription : février 2005
Messages : 183
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 183
Points : 84
Points : 84
Par défaut auto incrément

Bonjour,

Je voudrais savoir comment dire qu'une donnée de type serial est en auto increment. Par la même, je souhaiterais aussi savoir comment gérer cela dans une requête sql. Etant habitué des bases de données mysql je mettais juste double côtes pour signifier cela mais peut être qu'avec postgreSQL est-ce différent ?

Enfin je vous remercie de bien vouloir m'aider.
loacast est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/04/2005, 17h10   #2
Membre habitué
 
Inscription : mai 2002
Messages : 131
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 131
Points : 142
Points : 142
Une donnée de type serial est un raccourci pour définir un int4 avec une incrémentation automatique (à l'aide d'une séquence).

Bref, à partir du moment où tu dis qu'un champ est serial, il est forcément auto-incrémenté.
Quentin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/04/2005, 18h15   #3
Membre régulier
 
Inscription : février 2005
Messages : 183
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 183
Points : 84
Points : 84
Merci beaucoup pour ta réponse qui me ravit au plus haut point. Néanmoins comment faire la requête sql insert en sachant que l'on a un serial (qui comme tu l'as si bien dis s'auto gère) ?
loacast est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/04/2005, 23h13   #4
Membre régulier
 
Inscription : février 2005
Messages : 183
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 183
Points : 84
Points : 84
J'ai pas dans l'habitude d'insister sur une question mais celle-ci est vitale à l'avancer de mon activité et si je ne sais pas insérer des données avec un serial je ne peux continuer. En sachant que j'ai fini le côté client, ça serait bête de bloquer sur l'enregistrement ...

J'ai finalement trouvé ... et je me demande vraiment comment j'ai fait pour ne pas trouver avant

Bon pour les curieux :

insert into ma_table (libelle) values ('mon libelle')

sachant que ma table contient un id de type serial et un libelle de type varchar
loacast est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2005, 03h05   #5
Membre habitué
 
Inscription : mai 2002
Messages : 131
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 131
Points : 142
Points : 142
Bah, j'avais fini ma journée, je suis parti du boulot... et je rentre à peine chez moi, là

En fait, ton type serial, tu n'es pas obligé de le gérer dans les INSERT. Pour prendre un exemple simple : une table avec un champ serial et un champ texte

Code :
1
2
3
4
5
CREATE TABLE matable
(
    id serial,
    libelle text
)
Pour l'insertion, le plus simple, c'est d'omettre le champ id et de laisser la base de données se débrouiller avec :

Code :
INSERT INTO matable (libelle) VALUES ('le libellé')
Maintenant, si tu veux absolument gérer le serial dans ta requête INSERT, il faut faire appel à la séquence contenant l'auto-incrément. Le nom de la séquence respecte toujours le schéma suivant : nomtable_nomchamp_seq (dans mon exemple, matable_id_seq). Et pour s'en servir, il faut utiliser la méthode nextval() pour récupérer sa valeur. Ce qui donne :

Code :
INSERT INTO matable (id, libelle) VALUES (NEXTVAL(matable_id_seq), 'le libellé')
Quentin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2005, 20h02   #6
Membre régulier
 
Inscription : février 2005
Messages : 183
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 183
Points : 84
Points : 84
Merci bien pour la fonction ... Mais sinon, pour récupérer l'id sans devoir faire une requête qui cherche cet id, comment fait on sachant que je suis dans un contexte php ?
loacast est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2005, 22h11   #7
Membre habitué
 
Inscription : mai 2002
Messages : 131
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 131
Points : 142
Points : 142
Sans requête SQL, c'est impossible. Mais avec une simple SELECT, pour connaître la valeur courante de ta séquence, il faut appeler la méthode currval() :

Code :
SELECT currval('nom_sequence')
Par contre, il faut savoir que cette fonction ne fonctionnera pas s'il n'y a eu aucun nextval dans la session de la base de données.

Une dernière chose : je viens de m'apercevoir que j'ai fait une erreur dans mon post précédent. Le nom de la séquence, quand on appelle nextval() doit être mis entre quotes simples.
Quentin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2005, 10h31   #8
Membre actif
 
Avatar de tnodev
 
Inscription : mai 2005
Messages : 160
Détails du profil
Informations personnelles :
Âge : 40
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mai 2005
Messages : 160
Points : 155
Points : 155
Ce n'est pas mieux de faire cela ?

Code :
SELECT last_value FROM nom_sequence;
tnodev 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 13h47.


 
 
 
 
Partenaires

Hébergement Web