2016-05-23 17 views
0

Ich suchte nach diesem Problem. Aber mein Postgres-Benutzer hat genug Grant und ich glaube nicht, dass ich einen Schreibfehler habe. Wie auch immer, ich bin Neuling.Postgres: Fehlerbedingung "fk" der Relation "tbl" existiert nicht (mit Yii - PHP)

Ich habe diese Fehlermeldung:

21:38:03 set search_path='public' 
21:38:03 ALTER TABLE public.tbl_user DROP CONSTRAINT "fk-user-access-user-id" 
21:38:03 ERROR: constraint "fk-user-access-user-id" of relation "tbl_user" does not exist 

ich die PhpStorm verwenden. Ich öffne einfach die Datenbankansicht, erweitere die tbl_user Tabelle, klicke mit der rechten Maustaste und wähle "drop". Und ich habe diesen Fehler in der Konsole bekommen. Also der obige SQL-Befehl von der PHPStorm erzeugt.

Dann habe ich versucht, mit diesen Befehlen manuell auf Ubuntu:

ALTER TABLE tbl_user DROP CONSTRAINT "fk-user-access-user-id" 
ALTER TABLE "tbl_user" DROP CONSTRAINT "fk-user-access-user-id" 

Aber ich den gleichen Fehler.

Im PhpStorm sehe ich diese Definition:

"fk-user-access-user-id" FOREIGN KEY (access_id) REFERENCES tbl_access (id) 

Die tbl_access Tabelle mit dem primären id Schlüssel vorhanden ist.

Ich verstehe diese Fehlermeldung nicht, weil der "fk-user-access-user-id" Fremdschlüssel an der tbl_user und so für mich die 'relation "tbl_user" does not exist' seltsam ist. Ich verstehe nicht.

Ich habe versucht, ein ähnliches Problem auf StackOverflow zu finden, aber ich gab nach 20x Frage lesen auf.

Der Postgres-Code wurde übrigens vom Yii-Framework generiert.

$this->addColumn('{{%user}}', 'access_id', $this->integer()->notNull()->defaultValue(1)->after('status')); 
$this->addForeignKey('fk-user-access-user-id', '{{%user}}', 'access_id', '{{%access}}', 'id'); 
  • erste Reihe bedeutet access_id Spalt zu der Benutzertabelle hinzuzufügen.
  • zweite Zeile: Erstellen Sie einen Fremdschlüssel mit dem 'fk-user ...' - Namen in der Spalte access_id der Tabelle tbl_user table auf die ID-Spalte der Tabelle tbl_access.

Also habe ich diesen PHP-Code verwendet, um diese SQL-Befehle zu generieren. Ich bevorzuge diesen Weg, weil für mich die Migrationsdateien sehr nützlich sind.

Antwort

0

Höchstwahrscheinlich hat sich die Definition und die tatsächliche Implementierung in Ihrer zugrunde liegenden Datenbank von dem geändert, was die App aufgezeichnet hat. Abhängig von der Historie wird entweder eine Änderung in der App für diese Fremdschlüsselbeziehung nicht migriert, um die Änderung auf Datenbankebene beizubehalten, oder jemand hat eine Operation direkt auf der DB-Ebene ausgeführt, um die Beziehung zu entfernen. Sie müssen die App-Ebene zu diesem Zeitpunkt an die DB synchronisieren, würde ich denken.

Verwandte Themen