Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL > Requêtes
Requêtes Forum d'entraide sur les requêtes SQL spécifiques à PostgreSQL, les triggers, les vues, etc.
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 29/06/2011, 13h14   #1
Nouveau Membre du Club
 
Inscription : février 2005
Messages : 164
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 164
Points : 37
Points : 37
Par défaut Autoincrémentation champ primaire

Bonjour,

J'ai un souci sur une table quand je veux mettre à jour des données, j'ai le message suivant :

ERROR: duplicate key value violates unique constraint "primary010"

Mon champ clé primaire est défini comme suit :

id_logement bigint NOT NULL DEFAULT nextval('logement_id_logement_seq'::regclass)

La seule contrainte sur la table est la suivante :

Je fais par exemple la requête : primary sur le champ id_logement

Code :
INSERT INTO f_logement_social.logement (id_typelogement) VALUES (3)
J'avais au préalable transferé ma base de mySQL à postgres avec des enregistrements déjà existants dans la table, j'ai l'impression qu'il essaye de mettre un nouvel enregistrement avec un identifiant déjà existant sans prendre en compte ceux des enregistrements de la table ...


SD
mcdelay est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2011, 13h34   #2
Modérateur
 
Inscription : octobre 2008
Messages : 1 508
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 1 508
Points : 2 040
Points : 2 040
Ca arrive quand on spécifie des valeurs pour la colonne sans passer par la séquence, par exemple dans le cadre d'un import en masse. Dans ce cas il faut après l'import mettre à jour la séquence avec la valeur maximum de la colonne +1.
Ca peut se faire avec une requête de la forme:
Code :
1
2
SELECT SETVAL('nom_sequence', v)
 FROM (SELECT 1+max(nom_colonne)  AS v FROM nom_table) s;
estofilo est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 29/06/2011, 13h49   #3
Nouveau Membre du Club
 
Inscription : février 2005
Messages : 164
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 164
Points : 37
Points : 37
Merci de la réponse, j'y vois plus clair et peut-on le faire sous pgAdmin ?

Sinon que faut-il mettre en nom de séquence ?

Merci
mcdelay est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2011, 14h07   #4
Modérateur
 
Inscription : octobre 2008
Messages : 1 508
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 1 508
Points : 2 040
Points : 2 040
D'après la définition du champ:
id_logement bigint NOT NULL DEFAULT nextval('logement_id_logement_seq'::regclass)
le nom de séquence est logement_id_logement_seq

La requête de mise à jour de la séquence peut se faire sous pgadmin comme n'importe quelle autre requête.
estofilo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h37.


 
 
 
 
Partenaires

Hébergement Web