Postgres:关系“tbl”的错误约束“fk”不存在(使用Yii - PHP)

时间:2016-05-23 20:53:12

标签: postgresql yii phpstorm

我搜索了这个问题。但我的postgres用户有足够的资助,我不认为我有错误拼写错误。不过我是新手。

我有以下错误消息:

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

我使用PhpStorm。我只是打开数据库视图,展开tbl_user表,右键单击并选择“drop”。我在控制台中遇到了这个错误。 所以上面的SQL命令由PhpStorm生成。

然后我在Ubuntu上手动尝试了这些命令:

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

但我得到同样的错误。

在PhpStorm中我看到了这个定义:

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

tbl_access表存在主ID密钥。

我不明白这条错误消息,因为"fk-user-access-user-id"外键位于tbl_user,因此我'relation "tbl_user" does not exist'奇怪。我不明白。

我试图在StackOverflow上找到类似的问题,但是我在20倍的问题阅读后放弃了。

顺便说一句,postgres代码是由Yii框架生成的。

$this->addColumn('{{%user}}', 'access_id', $this->integer()->notNull()->defaultValue(1)->after('status'));
$this->addForeignKey('fk-user-access-user-id', '{{%user}}', 'access_id', '{{%access}}', 'id');
  • 第一行意味着将access_id列添加到用户表。
  • 第二行:在tbl_user表的access_id列上创建带有'fk-user ...'名称的外键,引用tbl_access表的id列。

所以我用这个PHP代码生成了这个SQL命令。我更喜欢这种方式,因为对我来说,迁移文件非常有用。

1 个答案:

答案 0 :(得分:0)

您的基础数据库中的定义和实际实施很可能已经从应用程序记录的内容发生了变化。根据历史记录的不同,要么不迁移该外键关系的应用程序更改以在数据库级别保留更改,要么某人直接在数据库级别执行某些操作以删除该关系。此时我需要将应用层同步到数据库。