Le Wed, 13 May 2009 20:23:41 +0200, Alain Montfranc a écrit:
Oui mais il peut y avoir doublons.
Non, il ne peut pas.
Le mieux est de demander d'abord une nouvelle valeur de sequence (nextval) et de l'utiliser pour les inserts qui suivent : on est alors assuré de l'unicité de la valeur même en cas d'exécutions en parallele
On l'est tout autant avec currval. PostgreSQL assure que c'est la dernière valeur *de la session* courante, donc indépendamment de ce qui se passe ailleurs. C
ok au temps pour moi. Mais comme "currentval" oblige a avoir fait d'abord un appel à nextval ;-)
e n'est PAS la même chose qu'un select max(...) ou équivalent.
Patrick Mevzek a écrit
Le Wed, 13 May 2009 20:23:41 +0200, Alain Montfranc a écrit:
Oui mais il peut y avoir doublons.
Non, il ne peut pas.
Le mieux est de demander d'abord une nouvelle valeur de sequence
(nextval) et de l'utiliser pour les inserts qui suivent : on est alors
assuré de l'unicité de la valeur même en cas d'exécutions en parallele
On l'est tout autant avec currval. PostgreSQL assure que c'est la
dernière valeur *de la session* courante, donc indépendamment de ce qui
se passe ailleurs. C
ok au temps pour moi. Mais comme "currentval" oblige a avoir fait
d'abord un appel à nextval ;-)
e n'est PAS la même chose qu'un select max(...) ou
équivalent.
Le Wed, 13 May 2009 20:23:41 +0200, Alain Montfranc a écrit:
Oui mais il peut y avoir doublons.
Non, il ne peut pas.
Le mieux est de demander d'abord une nouvelle valeur de sequence (nextval) et de l'utiliser pour les inserts qui suivent : on est alors assuré de l'unicité de la valeur même en cas d'exécutions en parallele
On l'est tout autant avec currval. PostgreSQL assure que c'est la dernière valeur *de la session* courante, donc indépendamment de ce qui se passe ailleurs. C
ok au temps pour moi. Mais comme "currentval" oblige a avoir fait d'abord un appel à nextval ;-)
e n'est PAS la même chose qu'un select max(...) ou équivalent.
Patrick Mevzek
Le Wed, 13 May 2009 21:52:46 +0200, Alain Montfranc a écrit:
ok au temps pour moi. Mais comme "currentval" oblige a avoir fait d'abord un appel à nextval ;-)
Non plus !
Suffit d'un serial ou d'un DEFAULT nextval('...') dans la définition de la table. La simple insertion d'un tuple entraînera l'appel à nextval() implicite, et le currval() sera après valide.
Ou alors on fait soi-même un nextval() au début et on utilise la valeur récupérée pour faire les INSERT. Auquel cas on n'a plus besoin de currval.
-- Patrick Mevzek . . . . . . . . . . . . . . Dot and Co <http://www.dotandco.net/> <http://www.dotandco.com/> <http://www.dotandco.net/ressources/icann_registrars/prices> <http://icann-registrars-life.dotandco.net/>
Le Wed, 13 May 2009 21:52:46 +0200, Alain Montfranc a écrit:
ok au temps pour moi. Mais comme "currentval" oblige a avoir fait
d'abord un appel à nextval ;-)
Non plus !
Suffit d'un serial ou d'un DEFAULT nextval('...') dans la définition de
la table. La simple insertion d'un tuple entraînera l'appel à nextval()
implicite, et le currval() sera après valide.
Ou alors on fait soi-même un nextval() au début et on utilise la valeur
récupérée pour faire les INSERT. Auquel cas on n'a plus besoin de currval.
--
Patrick Mevzek . . . . . . . . . . . . . . Dot and Co
<http://www.dotandco.net/> <http://www.dotandco.com/>
<http://www.dotandco.net/ressources/icann_registrars/prices>
<http://icann-registrars-life.dotandco.net/>
Le Wed, 13 May 2009 21:52:46 +0200, Alain Montfranc a écrit:
ok au temps pour moi. Mais comme "currentval" oblige a avoir fait d'abord un appel à nextval ;-)
Non plus !
Suffit d'un serial ou d'un DEFAULT nextval('...') dans la définition de la table. La simple insertion d'un tuple entraînera l'appel à nextval() implicite, et le currval() sera après valide.
Ou alors on fait soi-même un nextval() au début et on utilise la valeur récupérée pour faire les INSERT. Auquel cas on n'a plus besoin de currval.
-- Patrick Mevzek . . . . . . . . . . . . . . Dot and Co <http://www.dotandco.net/> <http://www.dotandco.com/> <http://www.dotandco.net/ressources/icann_registrars/prices> <http://icann-registrars-life.dotandco.net/>
Alain Montfranc
Patrick Mevzek a écrit
Le Wed, 13 May 2009 21:52:46 +0200, Alain Montfranc a écrit:
ok au temps pour moi. Mais comme "currentval" oblige a avoir fait d'abord un appel à nextval ;-)
Non plus !
Suffit d'un serial ou d'un DEFAULT nextval('...') dans la définition de la table. La simple insertion d'un tuple entraînera l'appel à nextval() implicite, et le currval() sera après valide.
Ou alors on fait soi-même un nextval() au début et on utilise la valeur récupérée pour faire les INSERT. Auquel cas on n'a plus besoin de currval.
Oui, c'est ce que je proposais ;-)
Patrick Mevzek a écrit
Le Wed, 13 May 2009 21:52:46 +0200, Alain Montfranc a écrit:
ok au temps pour moi. Mais comme "currentval" oblige a avoir fait
d'abord un appel à nextval ;-)
Non plus !
Suffit d'un serial ou d'un DEFAULT nextval('...') dans la définition de
la table. La simple insertion d'un tuple entraînera l'appel à nextval()
implicite, et le currval() sera après valide.
Ou alors on fait soi-même un nextval() au début et on utilise la valeur
récupérée pour faire les INSERT. Auquel cas on n'a plus besoin de currval.
Le Wed, 13 May 2009 21:52:46 +0200, Alain Montfranc a écrit:
ok au temps pour moi. Mais comme "currentval" oblige a avoir fait d'abord un appel à nextval ;-)
Non plus !
Suffit d'un serial ou d'un DEFAULT nextval('...') dans la définition de la table. La simple insertion d'un tuple entraînera l'appel à nextval() implicite, et le currval() sera après valide.
Ou alors on fait soi-même un nextval() au début et on utilise la valeur récupérée pour faire les INSERT. Auquel cas on n'a plus besoin de currval.