Décodage de l'erreur PostgreSQL : "Aucune contrainte unique pour la 'barre' de la table référencée"
Les utilisateurs de PostgreSQL 9.1 rencontrent souvent cette erreur déroutante lors de la construction de tables interconnectées : "il n'y a pas de contrainte unique correspondant aux clés données pour la table référencée "bar"." Ce guide explique la cause profonde et la solution.
L'erreur se produit généralement lorsque les tables (par exemple, foo
, bar
, baz
) sont liées via des clés étrangères. Par exemple, bar
peut faire référence à foo
à l'aide d'une clé étrangère (foo_fk
), et baz
fait référence à bar
à l'aide d'une autre clé étrangère (bar_fk
).
Le problème réside dans le tableau bar
. Bien qu'un index unique puisse exister sur une colonne combinée (comme foo_fk
et name
), il manque une contrainte unique sur la colonne name
elle-même.
Considérez ce scénario : deux lignes dans bar
partagent la même valeur name
(par exemple, « ams »). Tenter d'insérer une ligne dans baz
faisant référence à « ams » dans bar_fk
crée une ambiguïté. PostgreSQL ne peut pas déterminer la ligne bar
correcte, ce qui entraîne l'erreur.
La solution : renforcer l'unicité
Le correctif est simple : ajoutez une contrainte unique à la colonne name
de la table bar
. Utilisez cette commande SQL :
<code class="language-sql">ALTER TABLE bar ADD UNIQUE (name);</code>
Cela garantit que chaque bar
ligne a un name
unique, résolvant l'ambiguïté et permettant des relations de clé étrangère réussies. La structure de votre table fonctionnera désormais comme prévu.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!