j'ai été très surpris, agréablement d'ailleurs, de constater que PostgreSQL a comblé dans la suite des id càd au lieu de prendre max(id) + 1 PostgreSQL a pris le premier et seul trou trouvé ds cette table...
c'est ca le probleme je pense. Au lieu de prendre 21 par exemple, il a du prendre disons 9, le trou et maintenant à l'insert suivant il veut te creer un enregistrement 10 qui existe déjà. Donc applique la recette plus haut.
Tant pis pour les trous.
Essaie de faire un insert à la main avec pgAdmin pour voir si le problème se reproduit.
JB
"Yvon Thoraval" a écrit dans le message de news:1g8atl7.3zhk4m1900ie1N%
Yvon Thoraval wrote:
> j'ai regardé avec phpPgAdmin mais je ne vois pas comment changer la > valeur de la séquence.
j'ai fait un update comme ça, à partir d'aqua data studio :
update pg_class set reltuples = 21 where relname !~ '^pg_' and relname !~ '^sql_' and relkind = 'i' and relname ~ '^tj_real'
(ce qui donne la pkey associée a l'id)
j'y ai mis donc 21 (max + 1)
mais ca n'a rien changé... -- yt
Bonsoir,
essaie quelque chose comme ça:
DROP SEQUENCE public.famappli_id_famappli_seq;
j'ai été très surpris, agréablement d'ailleurs, de constater que
PostgreSQL a comblé dans la suite des id càd au lieu de prendre max(id)
+ 1 PostgreSQL a pris le premier et seul trou trouvé ds cette table...
c'est ca le probleme je pense. Au lieu de prendre 21 par exemple, il a du
prendre disons 9, le trou et maintenant à l'insert suivant il veut te creer
un enregistrement 10 qui existe déjà. Donc applique la recette plus haut.
Tant pis pour les trous.
Essaie de faire un insert à la main avec pgAdmin pour voir si le problème se
reproduit.
JB
"Yvon Thoraval" <yvon.thoravalNO-SPAM@free.fr> a écrit dans le message de
news:1g8atl7.3zhk4m1900ie1N%yvon.thoravalNO-SPAM@free.fr...
j'ai été très surpris, agréablement d'ailleurs, de constater que PostgreSQL a comblé dans la suite des id càd au lieu de prendre max(id) + 1 PostgreSQL a pris le premier et seul trou trouvé ds cette table...
c'est ca le probleme je pense. Au lieu de prendre 21 par exemple, il a du prendre disons 9, le trou et maintenant à l'insert suivant il veut te creer un enregistrement 10 qui existe déjà. Donc applique la recette plus haut.
Tant pis pour les trous.
Essaie de faire un insert à la main avec pgAdmin pour voir si le problème se reproduit.
JB
"Yvon Thoraval" a écrit dans le message de news:1g8atl7.3zhk4m1900ie1N%
Yvon Thoraval wrote:
> j'ai regardé avec phpPgAdmin mais je ne vois pas comment changer la > valeur de la séquence.
j'ai fait un update comme ça, à partir d'aqua data studio :
update pg_class set reltuples = 21 where relname !~ '^pg_' and relname !~ '^sql_' and relkind = 'i' and relname ~ '^tj_real'
reste un p'tit truc, c'est que l'id retourné n'est pas le bon après un insert le "pg_last_oid" me retourne 27126 alors que l'id est 22 (obtenu par select * from la base concernée)
autre p'tit truc j'ai fait comme tu m'as dit le dernier id étant 20, j'ai fait un setval 21 et l'id fut 22 il ya donc une pré-incrémentation et non une post-incrémentation ?
reste un p'tit truc, c'est que l'id retourné n'est pas le bon après un
insert le "pg_last_oid" me retourne 27126 alors que l'id est 22 (obtenu
par select * from la base concernée)
autre p'tit truc j'ai fait comme tu m'as dit le dernier id étant 20,
j'ai fait un setval 21 et l'id fut 22 il ya donc une pré-incrémentation
et non une post-incrémentation ?
reste un p'tit truc, c'est que l'id retourné n'est pas le bon après un insert le "pg_last_oid" me retourne 27126 alors que l'id est 22 (obtenu par select * from la base concernée)
autre p'tit truc j'ai fait comme tu m'as dit le dernier id étant 20, j'ai fait un setval 21 et l'id fut 22 il ya donc une pré-incrémentation et non une post-incrémentation ?
en tk merci ca m'a bien dépatouillé... -- yt
Joseph
Bonsoir, L'oid est un numéro interne au sgbd. Il est attribué à chaque objet (table, tuples ...) C'est normal qu'il ne corresponde pas à l'id que tu définit dans un champ. Ce n'est pas frmcement une bonne idée de l'utiliser, sauf dans de rares cas. Si tu drop ta table et que tu la restaure, les oid des enregistrements pourront être différents. Concernant la séquence, le numéro stocké est effectivement le dernier affecté.
JB
"Yvon Thoraval" a écrit dans le message de news:1g8d7db.1299tjl1wcaa5jN%
reste un p'tit truc, c'est que l'id retourné n'est pas le bon après un insert le "pg_last_oid" me retourne 27126 alors que l'id est 22 (obtenu par select * from la base concernée)
autre p'tit truc j'ai fait comme tu m'as dit le dernier id étant 20, j'ai fait un setval 21 et l'id fut 22 il ya donc une pré-incrémentation et non une post-incrémentation ?
en tk merci ca m'a bien dépatouillé... -- yt
Bonsoir,
L'oid est un numéro interne au sgbd. Il est attribué à chaque objet (table,
tuples ...) C'est normal qu'il ne corresponde pas à l'id que tu définit dans
un champ. Ce n'est pas frmcement une bonne idée de l'utiliser, sauf dans de
rares cas. Si tu drop ta table et que tu la restaure, les oid des
enregistrements pourront être différents.
Concernant la séquence, le numéro stocké est effectivement le dernier
affecté.
JB
"Yvon Thoraval" <yvon.thoravalNO-SPAM@free.fr> a écrit dans le message de
news:1g8d7db.1299tjl1wcaa5jN%yvon.thoravalNO-SPAM@free.fr...
reste un p'tit truc, c'est que l'id retourné n'est pas le bon après un
insert le "pg_last_oid" me retourne 27126 alors que l'id est 22 (obtenu
par select * from la base concernée)
autre p'tit truc j'ai fait comme tu m'as dit le dernier id étant 20,
j'ai fait un setval 21 et l'id fut 22 il ya donc une pré-incrémentation
et non une post-incrémentation ?
Bonsoir, L'oid est un numéro interne au sgbd. Il est attribué à chaque objet (table, tuples ...) C'est normal qu'il ne corresponde pas à l'id que tu définit dans un champ. Ce n'est pas frmcement une bonne idée de l'utiliser, sauf dans de rares cas. Si tu drop ta table et que tu la restaure, les oid des enregistrements pourront être différents. Concernant la séquence, le numéro stocké est effectivement le dernier affecté.
JB
"Yvon Thoraval" a écrit dans le message de news:1g8d7db.1299tjl1wcaa5jN%
reste un p'tit truc, c'est que l'id retourné n'est pas le bon après un insert le "pg_last_oid" me retourne 27126 alors que l'id est 22 (obtenu par select * from la base concernée)
autre p'tit truc j'ai fait comme tu m'as dit le dernier id étant 20, j'ai fait un setval 21 et l'id fut 22 il ya donc une pré-incrémentation et non une post-incrémentation ?
en tk merci ca m'a bien dépatouillé... -- yt
yvon.thoravalNO-SPAM
Joseph wrote:
L'oid est un numéro interne au sgbd. Il est attribué à chaque objet (table, tuples ...) C'est normal qu'il ne corresponde pas à l'id que tu définit dans un champ. Ce n'est pas frmcement une bonne idée de l'utiliser, sauf dans de rares cas.
Bonsoir,
oui, oui, merci pour l'info en fait je viens juste de terminer la migration de deux bases de mysql à postgresql de là vient ma confusion avec l'oid je pensais que la fonction (php <--> PostgreSQL) pg_last_oid($r) était "équivalente" à mysql_insert_id() (php <--> MySQL).
Que nénni !
pour lire le dernier id d'une table donnée je fais ça :
select id from table where id = (select max(id) from table ) ; -- yt
Joseph <NOSPAMbonnet.joseph@free.fr> wrote:
L'oid est un numéro interne au sgbd. Il est attribué à chaque objet (table,
tuples ...) C'est normal qu'il ne corresponde pas à l'id que tu définit dans
un champ. Ce n'est pas frmcement une bonne idée de l'utiliser, sauf dans de
rares cas.
Bonsoir,
oui, oui, merci pour l'info en fait je viens juste de terminer la
migration de deux bases de mysql à postgresql de là vient ma confusion
avec l'oid je pensais que la fonction (php <--> PostgreSQL)
pg_last_oid($r) était "équivalente" à mysql_insert_id() (php <-->
MySQL).
Que nénni !
pour lire le dernier id d'une table donnée je fais ça :
select id from table where id = (select max(id) from table ) ;
--
yt
L'oid est un numéro interne au sgbd. Il est attribué à chaque objet (table, tuples ...) C'est normal qu'il ne corresponde pas à l'id que tu définit dans un champ. Ce n'est pas frmcement une bonne idée de l'utiliser, sauf dans de rares cas.
Bonsoir,
oui, oui, merci pour l'info en fait je viens juste de terminer la migration de deux bases de mysql à postgresql de là vient ma confusion avec l'oid je pensais que la fonction (php <--> PostgreSQL) pg_last_oid($r) était "équivalente" à mysql_insert_id() (php <--> MySQL).
Que nénni !
pour lire le dernier id d'une table donnée je fais ça :
select id from table where id = (select max(id) from table ) ; -- yt