Dekodierung des PostgreSQL-Fehlers: „No Unique Constraint for Referenced Table 'bar'“
Benutzer von PostgreSQL 9.1 stoßen beim Erstellen miteinander verbundener Tabellen häufig auf diesen verwirrenden Fehler: „Es gibt keine eindeutige Einschränkung, die mit bestimmten Schlüsseln für die referenzierte Tabelle „bar“ übereinstimmt.“ In diesem Leitfaden werden die Grundursache und die Lösung erläutert.
Der Fehler tritt typischerweise auf, wenn Tabellen (z. B. foo
, bar
, baz
) über Fremdschlüssel verknüpft sind. Beispielsweise könnte bar
mit einem Fremdschlüssel (foo
) auf foo_fk
verweisen und baz
mit einem anderen Fremdschlüssel (bar
) auf bar_fk
verweisen.
Das Problem liegt in der Tabelle bar
. Während für eine kombinierte Spalte (wie foo_fk
und name
) möglicherweise ein eindeutiger Index vorhanden ist, fehlt für die Spalte name
selbst eine eindeutige Einschränkung.
Stellen Sie sich dieses Szenario vor: Zwei Zeilen in bar
haben denselben name
-Wert (z. B. „ams“). Der Versuch, eine Zeile in baz
einzufügen, die auf „ams“ in bar_fk
verweist, führt zu Mehrdeutigkeiten. PostgreSQL kann die richtige Zeile bar
nicht ermitteln, was zu dem Fehler führt.
Die Lösung: Einzigartigkeit erzwingen
Die Lösung ist unkompliziert: Fügen Sie eine eindeutige Einschränkung zur Spalte name
in der Tabelle bar
hinzu. Verwenden Sie diesen SQL-Befehl:
<code class="language-sql">ALTER TABLE bar ADD UNIQUE (name);</code>
Dadurch wird sichergestellt, dass jede bar
-Zeile ein eindeutiges name
hat, was Mehrdeutigkeiten auflöst und erfolgreiche Fremdschlüsselbeziehungen ermöglicht. Ihre Tabellenstruktur funktioniert nun wie vorgesehen.
Das obige ist der detaillierte Inhalt vonWarum wirft PostgreSQL „Keine eindeutige Einschränkung für die referenzierte Tabellenleiste' aus und wie kann ich das beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!