Javascript 列违反外键约束

Javascript 列违反外键约束,javascript,node.js,postgresql,knex.js,Javascript,Node.js,Postgresql,Knex.js,我试图在两个表之间创建一个关系,但当我尝试将对象插入postgres数据库时,似乎遇到了一些问题。我不断收到以下错误:在表中插入或更新“Tornament”违反外键约束“Tornament\u league\u id\u foreign”。我猜这和我的knex语法有关 插入数据库中 var data = { id: id, name: name, league_id: leagueId }; var

我试图在两个表之间创建一个关系,但当我尝试将对象插入postgres数据库时,似乎遇到了一些问题。我不断收到以下错误:
在表中插入或更新“Tornament”违反外键约束“Tornament\u league\u id\u foreign”
。我猜这和我的knex语法有关

插入数据库中

      var data = {
          id: id,
          name: name,
          league_id: leagueId
      };

      var query = knex('tournament').insert(data).toString();
      query += ' on conflict (id) do update set ' + knex.raw('name = ?, updated_at = now()',[name]);

      knex.raw(query).catch(function(error) {
        log.error(error);
      })
Knex表

knex.schema.createTable('league', function(table) {
    table.increments('id').primary();
    table.string('slug').unique();
    table.string('name');
    table.timestamp('created_at').notNullable().defaultTo(knex.raw('now()'));
    table.timestamp('updated_at').notNullable().defaultTo(knex.raw('now()'));
}),
knex.schema.createTable('tournament', function(table) {
    table.string('id').primary();
    table.integer('league_id').unsigned().references('id').inTable('league');
    table.string('name');
    table.boolean('resolved');
    table.timestamp('created_at').notNullable().defaultTo(knex.raw('now()'));
    table.timestamp('updated_at').notNullable().defaultTo(knex.raw('now()'));
})

当您创建
锦标赛
表时,对于列
league\u id
您指定了
.references('id')。inTable('league')
。这意味着对于该表中的每一行,表中必须存在一行
league
,其
id
与前一行中
league\u id
字段的值相同。显然,在您的插入(这是您唯一的插入吗?)中,您正在向
锦标赛添加一行,该行的
联赛id
联赛中不存在。一般来说,外部约束(即
.references
部分)意味着您必须先创建联赛,然后再在该联赛中创建锦标赛(这实际上是有意义的)。

您所说的“迁移”是什么意思?很抱歉混淆。不是移民!我编辑了这个问题