如何在 Knex 迁移中设置默认值?
How to set a default value in Knex migration?
我想在 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
约束。我尝试在 .defaultTo()
之前链接 .notNullable()
,它仍然给出相同的错误。我做错了什么吗?
您需要删除主键,更改列,然后重新创建它。
这是一个快速 copy/paste 答案,供那些来这里搜索“如何在 Knex 迁移中设置默认值”的人使用
table.string('state').notNullable().defaultTo('pending')
注意:notNullable()
不是必需的。
我想在 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
约束。我尝试在 .defaultTo()
之前链接 .notNullable()
,它仍然给出相同的错误。我做错了什么吗?
您需要删除主键,更改列,然后重新创建它。
这是一个快速 copy/paste 答案,供那些来这里搜索“如何在 Knex 迁移中设置默认值”的人使用
table.string('state').notNullable().defaultTo('pending')
注意:notNullable()
不是必需的。