Maison > base de données > tutoriel mysql > Pourquoi PostgreSQL lance-t-il « Aucune contrainte unique pour la « barre » de la table référencée » et comment puis-je y remédier ?

Pourquoi PostgreSQL lance-t-il « Aucune contrainte unique pour la « barre » de la table référencée » et comment puis-je y remédier ?

Mary-Kate Olsen
Libérer: 2025-01-08 22:13:07
original
501 Les gens l'ont consulté

Why Does PostgreSQL Throw

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal