如何在Knex迁移中设置默认值?

时间:2019-02-13 07:04:43

标签: knex.js

我想为Knex迁移中的主键设置默认值,但是遇到了问题。这是我最初的迁移:

exports.up = (knex, Promise) => {
  return knex.schema.createTable(
    'users',
    (table) => {
      table.uuid('id').primary();
      table.string('email');
    }
  );
};

我想将id字段默认为随机UUID。所以这是我的下一个迁移:

exports.up = (knex, Promise) => {
  return Promise.all([
    knex.raw('create extension if not exists "uuid-ossp"'),
    knex.schema.alterTable('users', (table) => {
      table.uuid('id')
        .defaultTo(knex.raw('uuid_generate_v4()'))
        .alter();
    }),
  ]);
};

当我跑步时,出现以下错误:

migration failed with error: alter table "users" alter column "id" drop not null - column "id" is in a primary key

基于此,Knex似乎正在尝试放弃NOT NULL约束。我尝试在.notNullable()之前将.defaultTo()链接起来,但仍然给出相同的错误。我做错了什么吗?

2 个答案:

答案 0 :(得分:1)

对于那些来这里搜索“如何在Knex迁移中设置默认值”的人,这是一个快速的复制/粘贴答案

table.string('state').notNullable().defaultTo('pending')

注意:不需要notNullable()

答案 1 :(得分:0)

您需要删除主键,更改列,然后重新创建。