我想为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()
链接起来,但仍然给出相同的错误。我做错了什么吗?
答案 0 :(得分:1)
对于那些来这里搜索“如何在Knex迁移中设置默认值”的人,这是一个快速的复制/粘贴答案
table.string('state').notNullable().defaultTo('pending')
注意:不需要notNullable()
。
答案 1 :(得分:0)
您需要删除主键,更改列,然后重新创建。