Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 将带有外键的列添加到表中。_Postgresql_Migration - Fatal编程技术网

Postgresql 将带有外键的列添加到表中。

Postgresql 将带有外键的列添加到表中。,postgresql,migration,Postgresql,Migration,我有一些问题。我想在我的表中添加引用其他表中其他列的新列。我会这样做: class m161202_153033_dodanie_informacji_o_obsludze_prawnej_do_pozyczki extends CDbMigration { public function safeUp() { $this->execute("ALTER TABLE loan ADD COLUMN administrator int NOT NULL

我有一些问题。我想在我的表中添加引用其他表中其他列的新列。我会这样做:

class m161202_153033_dodanie_informacji_o_obsludze_prawnej_do_pozyczki extends CDbMigration
{
    public function safeUp()
    {
            $this->execute("ALTER TABLE loan ADD COLUMN administrator int NOT NULL DEFAULT 15 REFERENCES person (id) ON UPDATE CASCADE ON DELETE NO ACTION;");
    }

    public function safeDown()
    {
            $this->execute("ALTER TABLE loan DROP COLUMN administrator;");
    }

}
但当我尝试执行此迁移时,出现以下错误:

外键冲突:7 详细信息:键(管理员)=(15)未出现在表“person”中


我知道我的表中没有“administrator”列。但我想在loan表中添加新的列“administrator”。我想从person表的“id”列中生成“administrator”外键。你能帮我一下吗,我做错了什么?

这个错误意味着
person
中没有
id
等于15的行,这是满足约束所必需的

当您运行
altertable
语句时,必须重写该表,并且新列将填充值15


通常,创建一个可为空且没有默认值的新列(然后
altertable
将不会重写该表)并使用
UPDATE
填充新列更容易。之后,您可以将列定义更改为
notnull
,并添加默认值。

该错误意味着
person
中没有
id
等于15的行,这是满足约束所必需的

当您运行
altertable
语句时,必须重写该表,并且新列将填充值15

通常,创建一个可为空且没有默认值的新列(然后
altertable
将不会重写该表)并使用
UPDATE
填充新列更容易。之后,您可以将列定义更改为
非空
,并添加默认值。

尝试此操作

class m161202_153033_dodanie_informacji_o_obsludze_prawnej_do_pozyczki extends CDbMigration
{
    public function safeUp()
    {
            $this->execute("INSERT INTO person (id) VALUES (15) ON CONFLICT (id) DO NOTHING;");
            $this->execute("ALTER TABLE loan ADD COLUMN administrator int NOT NULL DEFAULT 15 REFERENCES person (id) ON UPDATE CASCADE ON DELETE NO ACTION;");
    }

    public function safeDown()
    {
            $this->execute("ALTER TABLE loan DROP COLUMN administrator;");
    }
}
试试这个

class m161202_153033_dodanie_informacji_o_obsludze_prawnej_do_pozyczki extends CDbMigration
{
    public function safeUp()
    {
            $this->execute("INSERT INTO person (id) VALUES (15) ON CONFLICT (id) DO NOTHING;");
            $this->execute("ALTER TABLE loan ADD COLUMN administrator int NOT NULL DEFAULT 15 REFERENCES person (id) ON UPDATE CASCADE ON DELETE NO ACTION;");
    }

    public function safeDown()
    {
            $this->execute("ALTER TABLE loan DROP COLUMN administrator;");
    }
}

但有一行的id等于15。这是这个表中的PK,我是这个id的人。这个PK来自于贷款中应该是FK的人。你一定搞错了。错误消息毫无疑问地指出,在运行
ALTER TABLE
时,没有
person
拥有
id
15。你查错数据库了吗?在不同的模式中是否有多个表
person
?但person中有一行id等于15。这是这个表中的PK,我是这个id的人。这个PK来自于贷款中应该是FK的人。你一定搞错了。错误消息毫无疑问地指出,在运行
ALTER TABLE
时,没有
person
拥有
id
15。你查错数据库了吗?在不同的模式中是否有多个表
person