sql - 在迁移中使用另一列作为默认值
问题描述
我正在尝试将新列添加到具有列的现有tableName
表中anotherColumn
。
exports.up = function (knex, Promise) {
return knex.schema.table('tableName', table => {
table.string('newColumn').defaultTo(table.anotherColumn);
});
};
我应该如何将现有列的值放入这个新列?
解决方案
简短的回答是,您不能:该defaultTo
值不能来自另一列。但是,如果您只是想在迁移时进行默认设置,您可以这样做:
exports.up = knex =>
knex.schema.table('tableName', t => {
t.string('newColumn')
})
.then(() => knex('tableName').update('newColumn', knex.ref('anotherColumn'));
希望很明显,这不会更新迁移后插入的新行:为此,您需要一个触发器,或者确保您在插入代码中覆盖了它。
推荐阅读
- ruby-on-rails - 如何指定 Ransack 在标题和正文中搜索 - Rails
- c# - 如何防止 VS 调试器在每次等待时显示异常?
- ios - 无法在 swift 4 中解析 JSON
- python - 如何从`scipy.odr`获得正交投影?
- django - 如果在设置中添加,LimitOffsetPagination 默认情况下在泛型视图中无法全局工作
- c - 如何将 SOCKET (HANDLE) 从非托管 C 程序传递给 .NET 子进程?
- android-studio - Andriod Studio Gradle 同步失败:无法从选定的 JDK.2 运行 JVM
- c - GNU,autotools 的 makefile - 构建 C 语言源代码的规则和配方
- php - MPDF:重置总页码
- jenkins - TFS 服务挂钩错误请求