尝试删除约束和更改列时 Knex 向下迁移错误
Knex migration down error when trying to drop constraint and alter column
在之前的迁移中,我有一个名为 status
的列,它是 boolean
。在此迁移中,我将其更改为整数并创建了对 meetings_statuses
.
的引用
这是迁移:
exports.up = (knex) => {
return knex.schema.alterTable("meetings", (table) => {
table.integer("status").notNullable().unsigned().alter();
table
.foreign("status")
.references("id")
.inTable("meetings_statuses")
.onDelete("RESTRICT");
});
};
exports.down = (knex) => {
return knex.schema.debug().alterTable("meetings", (table) => {
table.dropForeign("status");
table.boolean("status").notNullable().defaultTo(true).alter();
});
};
向下迁移时我想返回到旧的列类型并删除外部关系。但是,当我这样做时,出现错误:
migration file "20210205004841_alter_meetings_table.js" failed
migration failed with error: alter table "meetings" alter column "status" type boolean using ("status"::boolean) - foreign key
调试显示如下:
[
{
sql: 'alter table "meetings" alter column "status" drop default',
bindings: []
},
{
sql: 'alter table "meetings" alter column "status" drop not null',
bindings: []
},
{
sql: 'alter table "meetings" alter column "status" type boolean using ("status"::boolean)',
bindings: []
},
{
sql: `alter table "meetings" alter column "status" set default '1'`,
bindings: []
},
{
sql: 'alter table "meetings" alter column "status" set not null',
bindings: []
},
{
sql: 'alter table "meetings" drop constraint "meetings_status_foreign"',
bindings: []
}
]
我的想法是,由于某种原因,Knex 试图先更改列而不是删除约束,从而导致错误,但我找不到任何解决方案。
谁能帮帮我?
您必须先删除外键,然后再更改它。
exports.down = async(knex) => {
await knex.schema.alterTable("meetings", (table) => {
table.dropForeign("status");
});
await knex.schema.alterTable("meettings", (table) => {
table.boolean("status").notNullable().defaultTo(true).alter();
});
};
在之前的迁移中,我有一个名为 status
的列,它是 boolean
。在此迁移中,我将其更改为整数并创建了对 meetings_statuses
.
这是迁移:
exports.up = (knex) => {
return knex.schema.alterTable("meetings", (table) => {
table.integer("status").notNullable().unsigned().alter();
table
.foreign("status")
.references("id")
.inTable("meetings_statuses")
.onDelete("RESTRICT");
});
};
exports.down = (knex) => {
return knex.schema.debug().alterTable("meetings", (table) => {
table.dropForeign("status");
table.boolean("status").notNullable().defaultTo(true).alter();
});
};
向下迁移时我想返回到旧的列类型并删除外部关系。但是,当我这样做时,出现错误:
migration file "20210205004841_alter_meetings_table.js" failed migration failed with error: alter table "meetings" alter column "status" type boolean using ("status"::boolean) - foreign key
调试显示如下:
[
{
sql: 'alter table "meetings" alter column "status" drop default',
bindings: []
},
{
sql: 'alter table "meetings" alter column "status" drop not null',
bindings: []
},
{
sql: 'alter table "meetings" alter column "status" type boolean using ("status"::boolean)',
bindings: []
},
{
sql: `alter table "meetings" alter column "status" set default '1'`,
bindings: []
},
{
sql: 'alter table "meetings" alter column "status" set not null',
bindings: []
},
{
sql: 'alter table "meetings" drop constraint "meetings_status_foreign"',
bindings: []
}
]
我的想法是,由于某种原因,Knex 试图先更改列而不是删除约束,从而导致错误,但我找不到任何解决方案。
谁能帮帮我?
您必须先删除外键,然后再更改它。
exports.down = async(knex) => {
await knex.schema.alterTable("meetings", (table) => {
table.dropForeign("status");
});
await knex.schema.alterTable("meettings", (table) => {
table.boolean("status").notNullable().defaultTo(true).alter();
});
};