Précédent   Forum du club des développeurs et IT Pro > Autres langages > Perl > SGBD
SGBD Toutes vos questions sur l'interaction entre Perl et les bases de données (SQL, mysql, postgresql, ORACLE, ...) Avant de poster, veuillez consulter les FAQs perl, les cours Perl.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 11/04/2011, 17h27   #1
Steph18
Invité de passage
 
Steph S
Inscription : novembre 2009
Messages : 12
Détails du profil
Informations personnelles :
Nom : Steph S

Informations forums :
Inscription : novembre 2009
Messages : 12
Points : 4
Points : 4
Par défaut PostgreSQL, Serial et Placeholder

Bonjour,

Je suis venu rapporter quelques chose qui me déconcerte (et je n'ai malheureusement trouvé la réponse nulle part) :
Est-il normal que lors de l'utilisation de tables munies de séquences postgreSQL (type SERIAL) conjointe à celle de placeholders pour insérer les données en base la première valeur insérée dans la séquence soit "2".

Ma séquence est initialisée avec "1" comme valeur de départ, et doit s'incrémenter de 1 à chaque pas (ce qui est effectivement le cas).

Côté perl, ma requête est préparée une unique fois, et exécutée à chaque insertion.
Tout se déroule parfaitement bien, si ce n'est que la première valeur rendue par mes séquences est toujours "2".

Quelqu'un a-t-il déjà observé un comportement similaire ?
Steph18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2011, 12h15   #2
Steph18
Invité de passage
 
Steph S
Inscription : novembre 2009
Messages : 12
Détails du profil
Informations personnelles :
Nom : Steph S

Informations forums :
Inscription : novembre 2009
Messages : 12
Points : 4
Points : 4
Bonjour à tous,

j'ai finalement trouvé la réponse à ce précédent post.
Si vous utilisez, une interface de gestion (comme phpPgAdmin) pour réinitialiser une séquence il se passera exactement ce qui est décrit ci-dessus. La séquence est réinitialisée comme suit :
Code :
1
2
3
4
5
# select * from seq_foo;
sequence_name     | last_value | increment_by |      max_value      | min_value | cache_value | log_cnt | is_cycled | is_called 
----------------------+------------+--------------+---------------------+-----------+-------------+---------+-----------+-----------
seq_foo           |          1 |            1 | 9223372036854775807 |         1 |           1 |       1 | f         | t
(1 row)
Ce type de réinitialisation n'utilise pas la clause optionnelle "RESTART WITH start" qui modifie la valeur courante de la séquence et set "is_called" à "false".

Donc, pour commencer par "1", il suffit d'appliquer à votre séquence :
Code :
# ALTER SEQUENCE seq_foo RESTART WITH 1;
Et ainsi, la valeur passée à la requête lors de la première insertion sera bien "1".
Code :
1
2
3
4
5
# select * from seq_foo;
sequence_name     | last_value | increment_by |      max_value      | min_value | cache_value | log_cnt | is_cycled | is_called 
----------------------+------------+--------------+---------------------+-----------+-------------+---------+-----------+-----------
seq_foo           |          1 |            1 | 9223372036854775807 |         1 |           1 |       1 | f         | f
(1 row)
Steph18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 07h29.


 
 
 
 
Partenaires

Hébergement Web