p
u
b
l
i
c
i
t
é
publicité
  1. #1
    Invité régulier
    Inscrit en
    novembre 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : novembre 2009
    Messages : 12
    Points : 5
    Points
    5

    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 ?

  2. #2
    Invité régulier
    Inscrit en
    novembre 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : novembre 2009
    Messages : 12
    Points : 5
    Points
    5

    Par défaut

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    # 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. type serial de postgresql
    Par phicarre dans le forum PowerAMC
    Réponses: 0
    Dernier message: 20/11/2012, 16h47
  2. postgresql probleme type SERIAL
    Par mapmip dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 09/02/2012, 23h04
  3. [Kylix] PostgreSql via ODBC
    Par doykati dans le forum Kylix
    Réponses: 3
    Dernier message: 08/02/2007, 10h10
  4. [JDBC] [PostgreSQL] Insert d'un serial
    Par e1lauren dans le forum JDBC
    Réponses: 3
    Dernier message: 16/05/2006, 15h57
  5. Réponses: 2
    Dernier message: 30/05/2002, 08h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo