在 knex 中创建外部关系时出错 - table 创建竞争条件
Error while creating foreign relation in knex - table creation race condition
我是 knex 的新手,多年来没有接触过 RDBMS(在 NoSQL 领域),所以请耐心等待。
我有两个迁移文件,一个用于轨道,一个用于用户(轨道归用户所有)。以下是相关文件:
migrations/20190919103115_users.js
exports.up = function(knex) {
return knex.schema.createTable('users', table => {
table.increments('id');
table.string('email', 50);
table.string('first_name', 50);
table.string('last_name', 50);
}
};
exports.down = function(knex) {
return knex.schema.dropTable('users');
};
migrations/20190406112728_tracks.js
exports.up = function(knex) {
return knex.schema.createTable('tracks', table => {
table.increments('id');
table.string('name', 140).notNullable();
table.integer('owner_id').notNullable();
table
.foreign('owner_id')
.references('id')
.inTable('users')
.onDelete('CASCADE');
table.json('metadata');
});
};
exports.down = function(knex) {
return knex.schema.dropTable('tracks');
};
当我 运行 yarn knex migrate:up
时,我得到:
migration file "20190406112728_tracks.js" failed
migration failed with error: alter table "tracks" add constraint "tracks_owner_id_foreign" foreign key ("owner_id") references "users" ("id") on delete CASCADE - relation "users" does not exist
我发现官方 Knex 文档非常缺乏(它更像是一个参考)并且无法弄清楚我缺少什么。显然我需要一些方法在 tracks
之前创建 users
,但不知道如何。
编辑:
好像是这样的:https://github.com/tgriesser/knex/issues/938#issuecomment-131491877
但是将整组table放在一个迁移文件中似乎是错误的。我认为重点是为每个 table?
创建一个迁移文件
迁移文件在执行前按名称排序,所以看起来您的 tracks
文件名具有更早的日期,因此它比创建早 运行s用户数。
只是 运行 npx knex migrate:make create_users
,然后 npx knex migrate:make create_tracks
。
它将生成具有正确时间戳的新文件,将您的代码复制到新文件,删除旧文件:]
我是 knex 的新手,多年来没有接触过 RDBMS(在 NoSQL 领域),所以请耐心等待。
我有两个迁移文件,一个用于轨道,一个用于用户(轨道归用户所有)。以下是相关文件:
migrations/20190919103115_users.js
exports.up = function(knex) {
return knex.schema.createTable('users', table => {
table.increments('id');
table.string('email', 50);
table.string('first_name', 50);
table.string('last_name', 50);
}
};
exports.down = function(knex) {
return knex.schema.dropTable('users');
};
migrations/20190406112728_tracks.js
exports.up = function(knex) {
return knex.schema.createTable('tracks', table => {
table.increments('id');
table.string('name', 140).notNullable();
table.integer('owner_id').notNullable();
table
.foreign('owner_id')
.references('id')
.inTable('users')
.onDelete('CASCADE');
table.json('metadata');
});
};
exports.down = function(knex) {
return knex.schema.dropTable('tracks');
};
当我 运行 yarn knex migrate:up
时,我得到:
migration file "20190406112728_tracks.js" failed
migration failed with error: alter table "tracks" add constraint "tracks_owner_id_foreign" foreign key ("owner_id") references "users" ("id") on delete CASCADE - relation "users" does not exist
我发现官方 Knex 文档非常缺乏(它更像是一个参考)并且无法弄清楚我缺少什么。显然我需要一些方法在 tracks
之前创建 users
,但不知道如何。
编辑:
好像是这样的:https://github.com/tgriesser/knex/issues/938#issuecomment-131491877
但是将整组table放在一个迁移文件中似乎是错误的。我认为重点是为每个 table?
创建一个迁移文件迁移文件在执行前按名称排序,所以看起来您的 tracks
文件名具有更早的日期,因此它比创建早 运行s用户数。
只是 运行 npx knex migrate:make create_users
,然后 npx knex migrate:make create_tracks
。
它将生成具有正确时间戳的新文件,将您的代码复制到新文件,删除旧文件:]