#1 Fri 25 January 2013 09:58
- JP LLORENS
- Participant assidu
- Date d'inscription: 12 Nov 2008
- Messages: 231
[Postgres] recalcul d'une clé primaire
Bonjour.
J'ai une clé primaire (ogc_fid, qui s'incrémente automatiquement à la création d'un nouvel objet ) corrompue dans une table Postgres. Est-il possible de la recalculer ?
Merci par avance.
JP
Hors ligne
#2 Fri 25 January 2013 10:09
- sigdu80
- Participant actif
- Date d'inscription: 2 Sep 2010
- Messages: 112
Re: [Postgres] recalcul d'une clé primaire
Bonjour,
quand tu dis que la clé est corrompue, c'est à dire ?
Ta clé primaire est de type serial ?
Tu as un message spécifique quand tu consultes la table postgresql ?
Que contient les lignes concernant cette colonne ogc_find (juste dire sur 2,3 lignes) ?
Hors ligne
#3 Fri 25 January 2013 11:45
- Gr1ng
- Participant occasionnel
- Date d'inscription: 7 Nov 2007
- Messages: 30
Re: [Postgres] recalcul d'une clé primaire
Bonjour,
ALTER SEQUENCE schema.table_ogc_fid_seq RESTART WITH 1 ;
Hors ligne
#4 Fri 25 January 2013 12:06
Re: [Postgres] recalcul d'une clé primaire
Bonjour,
Je pense pas que remettre à 1 la série va corriger le problème. Probablement qu'il y a un décalage entre la séquence et ce qui est utilisé dans le champ de la table.
Il y a un moyen pour remettre à jour la séquence en fonction du max(ogc_fid) de la table mais je ne l'ai pas sous la main mais google est mon amis :
SELECT MAX(id) FROM your_table;
// Puis lance
// Cela doit être plus haut que le résultat précédent.
SELECT nextval('your_table_id_seq');
// Si ce n'est pas le cas lance ceci pour metre à jour la séquence
SELECT setval('your_table_id_seq', (SELECT MAX(id) FROM your_table));
Y.
Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !! - GeoRezo vous aide ? Aidez GeoRezo !
Hors ligne
#5 Fri 25 January 2013 12:35
- JP LLORENS
- Participant assidu
- Date d'inscription: 12 Nov 2008
- Messages: 231
Re: [Postgres] recalcul d'une clé primaire
Merci pour les retours.
Pour répondre à sigdu80, dans un moment de lyrisme sql j'ai du modifier à la mimine une valeur de clé (ogc_fid est en serial not null) donc forcément quand j'essaye d'intégrer de nouveaux éléments via qgis, ça grogne pas mal et je me retrouve avec des valeurs de clef négative.
Je vais tester l'Alter sequence proposé.
Cordialement
JP
Hors ligne
#6 Fri 25 January 2013 16:13
- ChristopheV
- Membre
- Lieu: Ajaccio
- Date d'inscription: 7 Sep 2005
- Messages: 3199
- Site web
Re: [Postgres] recalcul d'une clé primaire
Bonjour,
je me retrouve avec des valeurs de clef négative.
Si je lis bien la doc postgresql Serial est un entier positif codé sur 32 bits. Une valeur négative c'est que la valeur SERIAL se prend d'un coup pour un entier signé ?
Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close
Hors ligne
#7 Fri 25 January 2013 16:53
- JP LLORENS
- Participant assidu
- Date d'inscription: 12 Nov 2008
- Messages: 231
Re: [Postgres] recalcul d'une clé primaire
Je ne sais pas !
L'origine du problème vient de la valeur START de ma séquence était inférieure à la valeur max de ma clef. J'ai essayé de corriger le tir en recalculant la clef de tous mes enregistrements via la calculette de qgis, et là tout est parti en vrille.
J'ai réglé le problème en supprimant les enregistrements avec des clef négatives et en lançant ensuite la requête Alter sequence suggérée par Gr1ng.
Merci à tous
Hors ligne