En sachant que j'ai déjà rempli ma base et donc ma table avec des méta données aussi la clé externe taxe_code_taxon=1 existe!
duplicate key violates unique constraint "pk_taxon".
Sachant que le message d'erreur concerne pk_taxon, donc le champ code_taxon, je ne vois pas le rapport avec le champ taxe_code_taxon
Mais bon, je pense avoir une idée du problème.
Le fait de déclarer un champ de type SERIAL va avoir pour conséquence de créer automatiquement une séquence, c'est à dire une table spéciale qui va avoir pour tâche de conserver la dernière valeur utilisée pour le compteur. Cette table spéciale porte le nom de ton champ suivi de _seq (dans ton cas, ce devrait être CODE_TAXON_seq)
A chaque insertion dans une table comportant un champ SERIAL, Postgres consulte la séquence correspondante, incrémente la valeur qu'elle contient et initialise le champ avec, et enregistre le résultat dans la séquence.
Tu dis que tu as déjà rempli ta base, comment as-tu fait ? Si tu est passé par une commande COPY FROM, il faut savoir que cette commande ne met pas à jour les séquences. Il faut que ce soit toi qui mettes à jour le compteur, avec la dernière valeur utilisée en utilisant la fonction setval(nom_de_ta_sequence, valeur_du_compteur). Si la dernière valeur de compteur est 56, alors utilise la requête suivante :
SELECT setval('CODE_TAXON_seq', 56);
Attention : comme toutes les autres tables, l'accès aux séquences est réglé par des droits d'accès (GRANT)
Partager