Knex 种子和主键序列

Knex seed and primary key sequence

我使用 knex.js 进行播种和迁移。使用类似于以下的代码。

exports.down = function(knex, Promise) {
  knex.schema.table('users', function(table) {
    table.dropColumn('fullname')
  })
}


exports.seed = function(knex, Promise) {
  // Deletes ALL existing entries
  return knex('users').del()
  .then(function () {
    // Inserts seed entries
    return knex('users').insert([
      {
        id: 1,
        email: 'nigel@email.com',
        password: 'dorwssap'
      },
      {
        id: 2,
        email: 'nakaz@email.com',
        password: 'password1'
      },
      {
        id: 3
        email: 'jaywon@email.com',
        password: 'password123'
      }
    ]);
  });
};

但是当我尝试将新数据插入 table 时 - 在我手动更新序列之前自动增量不起作用。我该如何解决这个问题?

当使用显式 id 插入数据时,postgresql 不会从 id_sequence 中读取值,因此序列不会在每次插入时递增。

您需要在不明确提供 ID 的情况下创建数据,否则您需要在创建初始数据后更新每个 table 的 ID 序列以更正值。