【问题标题】:column violate foreign key constraints列违反外键约束
【发布时间】:2016-09-08 00:01:17
【问题描述】:

我正在尝试在两个表之间创建关系,但是当我尝试将对象插入 postgres 数据库时,我似乎遇到了一些问题。我不断收到以下错误:insert or update on table "tournament" violates foreign key constraint "tournament_league_id_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()'));
})

【问题讨论】:

  • “迁移”是什么意思?
  • 很抱歉造成混淆。不是移民!我已经编辑了问题

标签: javascript node.js postgresql knex.js


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-24
    • 2018-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多